Проблема с WebClient: ожидание не удалось?
-
24-10-2019 - |
Вопрос
У меня есть пользовательский http -обработчик, который манипулирует HTTP Post и Get. Я получил проект, работающий на отдельном изолированном сервере, теперь нужно поместить его в производство ...
using (var client = new WebClient())
{
client.Credentials = CredentialCache.DefaultCredentials;
client.UploadFile("serverlocation:port", fileToUpload);
}
По какой -то причине сейчас при использовании client.UploadFile("", file);
т.е. принуждение пост HTTP
System.Net.WebException: The remote server returned an error: (417) Expectation failed.
at System.Net.WebClient.UploadFile(Uri address, String method, String fileName)
Что бы это могло быть? Я знаю, что код работает, так что еще? Может быть, сервер блокирует запросы HTTP Post?
Я пытался добавить:
ServicePointManager.Expect100Continue = false;
Но не имел успеха, хотя я не уверен на 100%, где должен был этот код, я предполагаю, что прежде чем использовать WebClient
РЕДАКТИРОВАТЬ 0:
я просто читать следующее:
Из-за присутствия более старых реализаций протокол позволяет неоднозначные ситуации, в которых клиент может отправить «Ожидайте: 100- продолжить» без получения ни 417 (ожидаемого) статуса, либо статуса 100 (продолжение). Поэтому, когда клиент отправляет это поле заголовка на сервер происхождения (возможно, через прокси), из которого он никогда не видел статус 100 (продолжение), клиент не должен ждать неопределенного периода, прежде чем отправлять тело запроса.
Я считаю, что этот запрос проходит через прокси, который может иметь какое -то отношение к проблеме.
РЕДАКТИРОВАТЬ 1:
Считаю, что эта проблема должна быть с 100-конфликтом, потому что, используя Fiddler, чтобы точно увидеть, что отправляет мое приложение WebClient.UploadFile
показывает это:
POST http://XXX.XXX.XXX.XXX:8091/file.myhandledextension HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------8ccd1eb03f78bc2
Host: XXX.XXX.XXX.XXX:8091
Content-Length: 4492
Expect: 100-continue
Несмотря на то, что поместил эту линию: ServicePointManager.Expect100Continue = false;
Перед использованием оператора. Я не думаю, что эта линия на самом деле работает.
Решение
Я закончил тем, что решил это, положив ServicePointManager.Expect100Continue = false;
В конструкторе для класса Calling WebClient.
Тогда я использовал Скрипач Чтобы проверить запрос POST, чтобы обеспечить Expect: 100-continue
больше не было в просьбе.