2014-09-08 6 views
1

Я реализую сервер WebDAV, но у меня проблема с предлагаемым клиентом (проводник Windows 7). В окнах я просматривающие к \ сервер \ Public \ контейнер, который мой сервер хочет представить как папку, содержащую два файла, так я получаю следующий запрос:Мой ответ WEBDAV PROPFIND не принят проводником Windows

PROPFIND /public/container HTTP/1.1 
Connection: Keep-Alive 
User-Agent: Microsoft-WebDAV-MiniRedir/6.1.7601 
Depth: 1 
translate: f 
Content-Length: 0 
Host: devsys:4511 

Мой ответ:

HTTP/1.1 207 Multi-Status 
Server: MyServer 2.12 
Date: Mon, 08 Sep 14 17:57:50 -0000 
Host: server.somewhere.com 
Content-Type: text/xml; charset="utf-8" 
Content-Length: 2901 

<d:multistatus xmlns:d="DAV:"> 
    <d:response> 
    <d:href>/public/container</d:href> 
    <d:propstat> 
     <d:prop> 
     <d:creationdate>2014-09-05T19:00:00Z</d:creationdate> 
     <d:displayname>container</d:displayname> 
     <d:resourcetype> 
      <d:collection/> 
     </d:resourcetype> 
     <d:supportedlock> 
      <d:lockentry> 
      <d:lockscope> 
       <d:exclusive/> 
      </d:lockscope> 
      <d:locktype> 
       <d:write/> 
      </d:locktype> 
      </d:lockentry> 
      <d:lockentry> 
      <d:lockscope> 
       <d:shared/> 
      </d:lockscope> 
      <d:locktype> 
       <d:write/> 
      </d:locktype> 
      </d:lockentry> 
     </d:supportedlock> 
     </d:prop> 
     <d:status>HTTP/1.1 200 OK</d:status> 
    </d:propstat> 
    </d:response> 
    <d:response> 
    <d:href>/public/container/myFile1</d:href> 
    <d:propstat> 
     <d:prop> 
     <d:getcontenttype>text/plain</d:getcontenttype> 
     <d:getcontentlength>375</d:getcontentlength> 
     <d:getetag>"1410198520"</d:getetag> 
     <d:creationdate>2014-09-05T19:00:00Z</d:creationdate> 
     <d:displayname>myFile1</d:displayname> 
     <d:getlastmodified>05 Sep 2014 19:00:00 GMT</d:getlastmodified> 
     <d:resourcetype/> 
     <d:supportedlock> 
      <d:lockentry> 
      <d:lockscope> 
       <d:exclusive/> 
      </d:lockscope> 
      <d:locktype> 
       <d:write/> 
      </d:locktype> 
      </d:lockentry> 
      <d:lockentry> 
      <d:lockscope> 
       <d:shared/> 
      </d:lockscope> 
      <d:locktype> 
       <d:write/> 
      </d:locktype> 
      </d:lockentry> 
     </d:supportedlock> 
     </d:prop> 
     <d:status>HTTP/1.1 200 OK</d:status> 
    </d:propstat> 
    </d:response> 
    <d:response> 
    <d:href>/public/container/myFile2</d:href> 
    <d:propstat> 
     <d:prop> 
     <d:getcontenttype>text/plain</d:getcontenttype> 
     <d:getcontentlength>375</d:getcontentlength> 
     <d:getetag>"1410198523"</d:getetag> 
     <d:creationdate>2014-09-05T19:00:00Z</d:creationdate> 
     <d:displayname>myFile2</d:displayname> 
     <d:getlastmodified>05 Sep 2014 19:00:00 GMT</d:getlastmodified> 
     <d:resourcetype/> 
     <d:supportedlock> 
      <d:lockentry> 
      <d:lockscope> 
       <d:exclusive/> 
      </d:lockscope> 
      <d:locktype> 
       <d:write/> 
      </d:locktype> 
      </d:lockentry> 
      <d:lockentry> 
      <d:lockscope> 
       <d:shared/> 
      </d:lockscope> 
      <d:locktype> 
       <d:write/> 
      </d:locktype> 
      </d:lockentry> 
     </d:supportedlock> 
     </d:prop> 
     <d:status>HTTP/1.1 200 OK</d:status> 
    </d:propstat> 
    </d:response> 
</d:multistatus> 

Windows любезно предоставит ошибку \ myserver \ public \ container не доступный. Возможно, у вас нет разрешения на использование этой сети ресурса. Обратитесь к администратору сервера, чтобы узнать, имеете ли вы права доступа . Параметр неверный.

Это не похоже, какой параметр он может быть, и почему он неверен. Может ли кто-нибудь заметить вопиющую ошибку? Я пропустил свойство, которое требуется Windows, или я просто сделал что-то неправильно?

Сервер находится на C, поэтому у меня есть контроль уровня байта над ответом.

Спасибо - Рог

+0

Синтаксис d: getetag сломан (отсутствует процитированный), но я сомневаюсь, что это проблема. –

+0

Будучи новичком в etags, я пропустил немного о цитировании, но я изменил это и не пошел ... Спасибо, что нашел его! – Thickycat

ответ

2

Рекомендация: тест с несколькими клиентами (например Cyberduck).

Реакция PROPFIND выше неверна; он имеет «multistatus» в пространстве имен, но должен находиться в пространстве имен «DAV:».

+0

Отличное место - спасибо! Тем не менее, я исправил это (и отредактировал исходный пост), но я все еще вижу ту же проблему. Я исследую кибердук. – Thickycat

+0

Я дал cyberduck попробовать, и он показывает папку с двумя файлами в ней (однажды я быстро реализовал «HEAD», который он настаивал на том, чтобы сначала запросить). Проблема, кажется, специфична для Windows тогда, если CyberDuck не будет особенно мягким. – Thickycat

+0

Возможно, вы захотите получить полную сетевую трассировку. Возможно, это не тот запрос, который является причиной. Например, IIRC, клиент MS может запросить родительские папки до «/». –

2

После первого удаления большинства свойств на том основании, что один из них предоставлял «неправильный параметр», а затем медленно возвращал их, кажется, что Windows не понравилась дата «getlastmodified», которая у меня была как:

5 сентября 2014 19:00:00 GMT

Изменение его:

пт, 5 сентября 2014 19:00:00 GMT

работает прекрасно.

Спасибо за вашу помощь - это помогло очистить код!

Смежные вопросы