У меня есть собственный обработчик Http, который манипулирует HTTP POST и GET. Я получил проект, работающий на отдельном изолированном сервере, теперь нужно запустить его в производство ...
using (var client = new WebClient())
{
client.Credentials = CredentialCache.DefaultCredentials;
client.UploadFile("serverlocation:port", fileToUpload);
}
По какой-то причине теперь при использовании client.UploadFile("", file);
, то есть форсирование HTTP POST
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-continue, потому что, используя 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;
перед оператором using. Я не думаю, что эта строка действительно работает.