Pregunta

Tengo un controlador HTTP personalizado que manipula HTTP Post and Get. Obtuve el proyecto trabajando en un servidor aislado separado ahora necesita ponerlo en producción ...

using (var client = new WebClient())
                {
                    client.Credentials = CredentialCache.DefaultCredentials;
                    client.UploadFile("serverlocation:port", fileToUpload);
                }

Por alguna razón ahora cuando se usa client.UploadFile("", file); es decir, forzando la publicación HTTP

System.Net.WebException: The remote server returned an error: (417) Expectation failed.

   at System.Net.WebClient.UploadFile(Uri address, String method, String fileName)

¿Qué podría ser esto? Sé que el código funciona, entonces, ¿qué más? ¿Quizás el servidor bloquea las solicitudes de publicación HTTP?

He intentado agregar:

ServicePointManager.Expect100Continue = false;

Pero no he tenido éxito, aunque no estoy 100% seguro de dónde debería este código antes, supongo que antes de usar el client Web


Editar 0:

Acabo de leer el seguimiento:

Debido a la presencia de implementaciones anteriores, el protocolo permite situaciones ambiguas en las que un cliente puede enviar "esperar: 100- Continuar" sin recibir un estado 417 (expectativo fallido) o un estado de 100 (continuar). Por lo tanto, cuando un cliente envía este campo de encabezado a un servidor de origen (posiblemente a través de un proxy) desde el cual nunca ha visto un estado de 100 (continuar), el cliente no debe esperar un período indefinido antes de enviar el cuerpo de la solicitud.

Creo que esta solicitud está pasando por un proxy, que puede tener algo que ver con el problema.

Editar 1:

Cree que este problema tiene que estar con 100 continios porque, usando a Fiddler para ver exactamente con qué está enviando mi aplicación WebClient.UploadFile muestra esto:

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

A pesar de haber puesto esa línea: ServicePointManager.Expect100Continue = false; antes de la declaración de uso. No creo que esta línea realmente funcione.

¿Fue útil?

Solución

Terminé resolviendo esto colocando el ServicePointManager.Expect100Continue = false; en el constructor para la clase WebClient de llamadas.

Entonces usé Violinista para examinar la solicitud de publicación para garantizar Expect: 100-continue ya no estaba en la solicitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top