Frage

Ich habe einen benutzerdefinierten HTTP -Handler, der den HTTP -Beitrag manipuliert und bekomme. Ich habe das Projekt auf einem separaten isolierten Server gearbeitet, um es jetzt in Produktion zu bringen ...

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

Aus irgendeinem Grund jetzt bei der Verwendung client.UploadFile("", file); dh den HTTP -Beitrag erzwingen

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

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

Was könnte das sein? Ich weiß, dass der Code funktioniert, also was noch? Vielleicht blockiert der Server HTTP -Postanforderungen?

Ich habe versucht hinzuzufügen:

ServicePointManager.Expect100Continue = false;

Ich habe aber keinen Erfolg gehabt, obwohl ich nicht zu 100% sicher bin, wo dieser Code sollte, bevor ich den Webclient verwende


Bearbeiten 0:

ich habe gerade lesen folgende:

Aufgrund der Anwesenheit älterer Implementierungen ermöglicht das Protokoll mehrdeutige Situationen, in denen ein Kunde "Erwartung: 100- Fortsetzung" senden kann, ohne entweder einen Status von 417 (Erwartung fehlgeschlagen) oder einen Status von 100 (Fortsetzung) zu erhalten. Wenn ein Client dieses Header -Feld an einen Ursprungsserver (möglicherweise über einen Proxy) sendet, aus dem er noch nie einen 100 (Fortsetzung) Status gesehen hat, sollte der Client nicht auf einen unbestimmten Zeitraum warten, bevor er die Anforderungsbehörde sendet.

Ich glaube, diese Anfrage durchläuft einen Stellvertreter, der möglicherweise etwas mit dem Problem zu tun hat.

Bearbeiten 1:

Glauben Sie, dass dieses Problem mit 100 Anpassungen sein muss, da mit Fiddler genau erkennen, was meine Bewerbung sendet WebClient.UploadFile zeigt dies:

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

Obwohl er diese Linie eingefügt hat: ServicePointManager.Expect100Continue = false; Vor der Verwendung der Verwendung. Ich glaube nicht, dass diese Linie tatsächlich funktioniert.

War es hilfreich?

Lösung

Ich habe dies gelöst, indem ich das platzierte ServicePointManager.Expect100Continue = false; im Konstruktor für die aufrufende Webclient -Klasse.

Dann benutzte ich Geiger Untersuchung der Postanfrage, um sicherzustellen Expect: 100-continue war nicht mehr in der Anfrage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top