Question

J'ai une coutume Http Handler qui manipule HTTP POST et GET. Je suis le projet de travail sur un serveur séparé isolé maintenant besoin de mettre en production ...

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

Pour une raison quelconque maintenant lors de l'utilisation client.UploadFile("", file); à savoir forcer le protocole 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)

Qu'est-ce que cela pourrait-il être? Je sais que le code fonctionne, alors quoi d'autre? Peut-être que les blocs de serveur HTTP requêtes POST?

J'ai essayé d'ajouter:

ServicePointManager.Expect100Continue = false;

Mais ont pas eu de succès si je ne suis pas 100% sûr où ce code devrait avant, je suppose avant que je suis sur le WebClient


Modifier 0:

Je viens lire ce qui suit:

En raison de la présence d'implémentations plus anciennes, le protocole permet des situations ambiguës dans lesquelles un client peut envoyer « Attendez-vous à: 100- continuer » sans recevoir soit une 417 (Échec de l'attente) statut ou un état 100 (Continuer). Par conséquent, lorsqu'un client envoie ce champ d'en-tête à un serveur d'origine (éventuellement par l'intermédiaire d'un proxy) à partir de laquelle il n'a jamais vu un 100 (Continue), le client ne doit pas attendre pour une durée indéterminée avant d'envoyer le corps de la demande.

Je crois que cette demande passe par un proxy, ce qui peut avoir quelque chose à voir avec la question.

Modifier 1:

Croyez ce problème doit être avec 100 continuer parce que, en utilisant Fiddler pour voir exactement ce que mon application envoie avec WebClient.UploadFile montre ceci:

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

En dépit d'avoir mis cette ligne: ServicePointManager.Expect100Continue = false; avant l'instruction à l'aide. Je ne pense pas que cette ligne fonctionne réellement.

Était-ce utile?

La solution

J'ai fini par résoudre ce en mettant l'ServicePointManager.Expect100Continue = false; dans le constructeur de la classe WebClient appelant.

J'utilisé Fiddler pour examiner la requête POST pour assurer Expect: 100-continue n'a pas été à la demande plus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top