2013-07-31 2 views
0

Я пытаюсь получить доступ и изменить свойства «createdate» и «lastmodified» файла, который я ранее загрузил на веб-адрес. Я получаю ответ «HTTP/1.1 424 Failed Dependency», который я интерпретирую как «запрос не выполнен из-за отказа предыдущего запроса» в соответствии с https://tools.ietf.org/html/rfc4918.WebDav PROPPATCH status status HTTP/1.1 424 Failed Dependency

Я потерял информацию о том, что предыдущий запрос не работает здесь, потому что, когда я запускаю код, я не получаю никаких ошибок. Вот код:

FileInfo^ myfI=gcnew FileInfo(myfilePath); 
String^ mytime=myfI->LastWriteTimeUtc.ToFileTimeUtc().ToString(); 
String^ strBody = "<?xml version=\"1.0\"?>" 
      + "<d:propertyupdate xmlns:d=\"DAV:\">" 
      + "<d:set>" 
      + "<d:prop>" 
      + "<creationdate>" + myfI->CreationTimeUtc.ToFileTimeUtc().ToString() + "</creationdate>" 
      + "</d:prop>" 
      + "<d:prop>" 
      + "<lastmodified>" + mytime + "</lastmodified>" 
      + "</d:prop>" 
      + "</d:set>" 
      + "</d:propertyupdate>"; 

array<Byte>^ mybytes= Encoding::UTF8->GetBytes(strBody); 

String^ responseresult=""; 
String^ filename= myfI->Name; 
System::Net::HttpWebRequest^ httpPutRequest = (System::Net::HttpWebRequest^)System::Net::WebRequest::Create(this->myURL + destinationpath+ "/" + filename); 
    httpPutRequest->Credentials = gcnew NetworkCredential(this->myUserName, this->myPassword); 
    httpPutRequest->PreAuthenticate = true; 
    httpPutRequest->Method = L"PROPPATCH"; 
httpPutRequest->ContentType = "text/xml"; 
httpPutRequest->ContentLength = mybytes->Length; 
Stream^ requestStream = httpPutRequest->GetRequestStream(); 
requestStream->Write(mybytes,0,mybytes->Length); 
requestStream->Close(); 

HttpWebResponse^ httpPutResponse = (HttpWebResponse^)httpPutRequest->GetResponse(); 
responseresult=httpPutResponse->StatusDescription; 
HttpStatusCode mycode=httpPutResponse->StatusCode; 
Stream^ myresponse=httpPutResponse->GetResponseStream(); 
StreamReader^ myr=gcnew StreamReader(myresponse); 
String^ res=myr->ReadToEnd(); 

Я попытался только один собственности, а также и имеют один и тот же ответ.

Посоветуйте, пожалуйста?

ответ

2

Важно откликнуться на весь ответ. Ошибка зависимость будет выбрасываться в следующем случае:

  1. Вы делаете PROPPATCH обновлять более 1 свойство
  2. Одно из этих свойств не удается (например, 403 Forbidden)
  3. Другие свойства теперь будут автоматически получить 424 Failed Dependency, потому что PROPATCH должен либо полностью преуспеть, либо полностью выйти из строя.

Я полагаю, что ваш сервер не позволяет вам обновлять одно или несколько из этих свойств. {DAV:}lastmodified, в частности, является, в общем, защищенным и, таким образом, средством только для чтения, которое вам никогда не разрешается изменять. Это зависит от сервера, если они делают или на самом деле не позволяют вам это делать, но в целом он должен потерпеть неудачу.

+0

Я предполагаю, что сервер не разрешает изменение, поскольку я попытался использовать только одно свойство за раз. Итак, как файл может быть загружен без изменения его сигнатур даты? (довольно и важно для многих целей) или, по его недостатку, как разрешить эти свойства быть изменены в IIS? – Aznarepse

+0

Серверы WebDAV обычно не позволяют этого. Если IIS позволяет, это нестандартно. – Evert

+0

Как временное решение (пока не выясню другое) Я отправляю файл параллельного файла в webdav с информацией о времени, и служба на сервере просматривает новые файлы и повторно устанавливает исходные данные. Поскольку оригинальное приложение просматривает время по прибытии, я должен использовать временный каталог, а затем переместить их в конечный пункт назначения, как только время будет правильным. Немного сложный, но на данный момент выполняет эту работу. Я все равно хочу просто отправить файл с нужными моментами, потому что я не могу установить службу на любом сервере ... – Aznarepse

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