Вопрос

У меня есть пользовательский 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 больше не было в просьбе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top