16 Stimmen

System.Net.WebException: Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet geschlossen

Ich schreibe eine .NET-Anwendung, die Daten an eine andere .NET-Anwendung weiterleiten soll. Ich verwende den folgenden Code, um die Anmeldeseite anzufordern

WebProxy proxy = new WebProxy("http://proxy:80/", true);
HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
//proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
// webRequest.Proxy = proxy;
webRequest.Proxy = WebRequest.DefaultWebProxy;

StreamReader responseReader = new StreamReader
                                  (webRequest.GetResponse().GetResponseStream());
string responseData = responseReader.ReadToEnd();

aber es scheitert an dieser Zeile

StreamReader responseReader = new StreamReader
                                  (webRequest.GetResponse().GetResponseStream());

mit der Fehlermeldung :

System.Net.WebException: The underlying connection was closed: The connection was 
                         closed unexpectedly.

0 Stimmen

Das Problem scheint darin zu bestehen, dass der Server die Verbindung schließt - möglicherweise stirbt er. Überprüfen Sie den Server (Protokolle, eventwvr, etc.) und fügen Sie Server-Code. Es kann auch sein, dass Sie sich nicht mit der richtigen Box verbinden (Ihre Proxy-Einstellungen, etc.). Wie lautet der http-Status, den Sie zurückbekommen (er steht in der Antwort auf die Ausnahme, wenn ich mich richtig erinnere)?

2 Stimmen

Um das Problem aufzuspüren, schlage ich vor, dass Sie den Aufruf in einen Code zum Abfangen von Ausnahmen verpacken und den vollständigen Stack-Trace ausdrucken.

1 Stimmen

Diese Ausnahme ist besonders schwer aufzuspüren. Bitte geben Sie so viele Informationen wie möglich, wenn Sie vernünftige Antworten erhalten möchten

2voto

Jehan Perera Punkte 21

Derselbe Fehler trat auf bei der Verwendung von http GET für eine API, die https . Könnte jemandem helfen.

0voto

dred17 Punkte 139

In meinem Fall musste ich die Proxy-Einstellungen so vornehmen, dass nicht nur HTTP, sondern auch HTTPS auf demselben Port zugelassen wird, da eine der Anfragen über das HTTPS-Protokoll gesendet wurde.

0voto

Softec Punkte 987

Bei mir war es ein anderer Fall. Die Abfrage dauerte zu lange und die Verbindung wurde unterbrochen. Es gibt fünf Timeouts in WCF 1. Sendezeitüberschreitung - Standard 1 Minute 2. Zeitüberschreitung beim Empfangen - Standardwert 1 Minute 3. Zeitüberschreitung beim Öffnen - Voreinstellung 1 min 4. Zeitüberschreitung beim Schließen - Voreinstellung 1 min 5. Zeitüberschreitung bei Inaktivität - Voreinstellung 10 min

Ich hatte die Sende- und Empfangszeit korrekt eingestellt, aber das Problem lag am Inaktivitäts-Timeout, da die Abfrage auf dem Server zu lang war und der WCF-Dienst den Kanal schloss, so dass er die Antwort nicht zurücksenden konnte. Ich hoffe, dies hilft Ihnen, wenn Sie WCF verwenden, um eine Antwort vom Server zu erhalten, die lange Zeit zum Ausführen benötigt.

-1voto

Mak Punkte 9
myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;

Das ist die Lösung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X