2011-01-06 2 views
10

Wir verwenden WebClient, .NET 3.5sp1 in einer Winforms-Anwendung. Für einige Benutzer ergibt dies in einer Ausnahme mit der Nachricht:Reproduzieren "Eine Verbindung, von der erwartet wurde, dass sie am Leben gehalten wird, wurde vom Server geschlossen."

"Die zugrunde liegende Verbindung wurde geschlossen: Eine Verbindung, die am Leben gehalten werden sollte, wurde vom Server geschlossen."

Suche ein bisschen um das Netz ein „fix“, schlägt http Keep-Alive nur zu deaktivieren, die wir tun, nicht wirklich interessiert sind, einige legt nahe, es könnte ein Fehler in den .NET-Bibliotheken usw.

Die Fehlermeldung weist darauf hin, dass es sich um eine Keepalive-HTTP-Verbindung handelt, die vom Server (oder einem Proxy) geschlossen wurde, ohne dass der WebClient dies richtig erkannt hat.

Wir denken darüber nach, diesen speziellen Fall zu erfassen und einfach die Anfrage erneut zu versuchen. Wir können diese Ausnahme jedoch nicht reproduzieren. Damit.

  1. Wie können wir den Fall richtig abfangen, der die obige Fehlermeldung ergibt.

    catch (WebException ex) { if (ex.Message == "Die zugrunde liegende Verbindung wurde geschlossen: Eine Verbindung, die am Leben gehalten wird erwartet wurde, wurde vom Server geschlossen") {...}

    stinkt.

  2. Gibt es Tipps, wie wir die obige Ausnahme reproduzieren können?

+0

'Für einige Benutzer' legt nahe, dass es nicht jeder ist. Sind diese Benutzer hinter einem Proxy (entweder explizit festgelegt oder ein transparenter Proxy)? Besetzte Proxy-Server in Unternehmensumgebungen können Verbindungen unerwartet abbrechen, daher die Ausnahme. So oder so, es ist ein Netzwerkproblem (Client, Host oder die Zwischenbits) irgendeiner Art, kein Fehler in .NET Framework. –

+2

Sie haben wahrscheinlich Recht, dass es ein Netzwerkproblem ist. Daher möchten wir versuchen, die Anfrage einfach erneut zu versuchen, obwohl dies alles ist, obwohl alles, was wir wissen, dieser Text ist, der von einer WebException stammt - gibt es also eine zuverlässige Möglichkeit, diese spezifische Exception, einen bestimmten Fehlercode oder was nicht zu erkennen? Und wir wollen es reproduzieren, damit wir testen können, dass das Wiederholen der Anfrage keine andere Schlechtigkeit verursacht, wenn "Verbindung geschlossen" wurde. – Habalusa

+0

Ich erhalte den gleichen Fehler, wenn ich versuche, große Daten von der Dienstschicht zu senden. Irgendeine Ahnung, warum das passieren könnte? –

Antwort

2

Der WebClient erkennt dies einfach. Also die Ausnahme. Sie müssen den Server finden, der sich schlecht benimmt. Nicht ganz sicher, was zu tun ist, wenn Sie diesen Server finden, vielleicht können Sie dem Administrator eine nette E-Mail-Nachricht senden.

Die Server-URL protokollieren.

+0

Nun, das könnte alles sein, von einem überladenen Nat-Gateway, das die Verbindung vorzeitig schließt, bis zu einem Proxy-Server, der dazwischen agiert, von denen niemand je herausfinden wird, geschweige denn reparieren. In der Zwischenzeit leiden die Benutzer. Hier ist auch eine offensichtliche Race-Bedingung - z.B. Was ist, wenn der Server korrekt einen Verbindungsabschluß sendet: während der Client versucht, eine neue Anforderung für die zwischengespeicherte Verbindung zu senden, aber der Verbindungsabschluß noch nicht empfangen wurde. Daher die Frage - wie können wir diese Ausnahme reproduzieren, und wie überprüfen wir in diesem Fall die e.Message? – Habalusa

+1

Das Anpassen der Ausnahmebehandlung ist nur nützlich, wenn Sie etwas in Ihrem Code tun können, um das Problem zu beheben.Sie können einen überladenen Router oder einen balky Server nicht reparieren. Und das Betriebssystem kann den Unterschied nicht feststellen. Dies gehört zu einer großen Kategorie von WebExceptions. Sie können es erst später erneut versuchen. Aus diesem Grund gibt es keine dedizierte Ausnahmeklasse für diesen Fehler. Ähnlich wie IOException ("Mist passiert") vs FileNotFoundException ("allgemeiner Mist, könnte das beheben"). –

1

Ich schlage vor, Sie haben einen Blick auf this Blog von Misrosoft: Http-Client-Protokoll Probleme

Verwandte Themen