Domanda

Ho un personalizzato Http Handler che manipola HTTP POST e GET. Ho ottenuto il progetto lavora ad un server separato isolato adesso ho bisogno di mettere in produzione ...

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

Per qualche motivo ora utilizzando client.UploadFile("", file); cioè costringendo l'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)

Cosa potrebbe essere? So che le opere codice, in modo che altro? Forse i blocchi del server HTTP richieste POST?

Ho provato ad aggiungere:

ServicePointManager.Expect100Continue = false;

Ma non hanno avuto successo anche se non sono al 100% sicuro dove questo codice dovrebbe prima, presumo prima che io sto usando WebClient


Modifica 0:

Ho appena leggere quanto segue:

A causa della presenza di implementazioni più anziani, il protocollo consente situazioni ambigue in cui un client può inviare "Expect: 100- continuare" senza ricevere né uno stato 417 (Expectation Failed) o un 100 (Continua) Stato. Pertanto, quando un client invia questo campo di intestazione di un server di origine (eventualmente tramite un proxy), da cui non ha mai visto uno stato 100 (Continua), il client DOVREBBE non aspettare a tempo indeterminato prima di inviare il corpo della richiesta.

Credo che questa richiesta sta attraversando un proxy, che può avere qualcosa a che fare con la questione.

Modifica 1:

Credo che questo problema deve essere con 100 continuare perché, utilizzando Fiddler per vedere esattamente ciò che la mia applicazione sta inviando con WebClient.UploadFile mostra questo:

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

Nonostante abbia messo quella linea: ServicePointManager.Expect100Continue = false; prima della istruzione using. Non credo che questa linea funziona realmente.

È stato utile?

Soluzione

Ho finito per risolvere questo mettendo il ServicePointManager.Expect100Continue = false; nel costruttore per la classe WebClient chiamando.

Poi ho usato Fiddler per esaminare la richiesta POST per garantire Expect: 100-continue non era nella richiesta di più.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top