Der Remote-Host hat die Verbindung geschlossen. Der Fehlercode lautet 0x800704CD

80

Ich erhalte Fehler-E-Mails von meiner Website, wenn eine Ausnahme auftritt. Ich erhalte diesen Fehler:

Der Remote-Host hat die Verbindung geschlossen. Der Fehlercode lautet 0x800704CD

und weiß nicht warum. Ich bekomme ungefähr 30 pro Tag. Ich kann den Fehler auch nicht reproduzieren und kann das Problem daher nicht aufspüren.

Die Website ist ASP.NET 2 und läuft unter IIS7.

Stapelspur:

at System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError (Int32-Ergebnis, Boolean throwOnDisconnect) at System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush () at System.Web.HttpResponse.Flush (Boolean finalFlush) ) bei System.Web.HttpResponse.End () bei System.Web.UI.HttpResponseWrapper.System.Web.UI.IHttpResponse.End () bei System.Web.UI.PageRequestManager.OnPageError (Objektabsender, EventArgs e) bei System .Web.UI.TemplateControl.OnError (EventArgs e) bei System.Web.UI.Page.HandleError (Ausnahme e) bei System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint.UI bei SystemW. Page.ProcessRequest (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) bei System.Web.UI.Page.ProcessRequest () bei System.Web.UI.Page.ProcessRequestWithNoAssert (HttpContext-Kontext) unter System.Web.UI.Page.ProcessRequest (HttpContext-Kontext) unter ASP.default_aspx.ProcessRequest (HttpContext-Kontext) unter System.Web.HttpApplication.CallHandler. IExecutionStep.Execute () bei System.Web.HttpApplication.ExecuteStep (IExecutionStep-Schritt, Boolean & completeSynchronously)

webnoob
quelle

Antworten:

60

Ich bekomme das die ganze Zeit. Dies bedeutet, dass der Benutzer mit dem Herunterladen einer Datei begonnen hat und diese dann entweder fehlgeschlagen ist oder sie abgebrochen hat.

Um die Ausnahme zu reproduzieren, versuchen Sie dies selbst. Ich kenne jedoch keine Möglichkeiten, dies zu verhindern (außer, dass nur diese spezielle Ausnahme behandelt wird).

Abhängig von Ihrer App müssen Sie entscheiden, wie Sie am besten vorankommen.

m.edmondson
quelle
Ich biete keine Dateidownloads auf meiner Website an. Würde das Herunterladen von Seiteninhalten dies ebenfalls verursachen?
Webnoob
6
Ja, ein Blick auf den Stack-Trace System.Web.HttpResponse.Flush()bedeutet jede Art von Antwort. Ich habe gerade das , es kann Sie auf die Route des Problems helfen , wo Ansichtszustand ist sehr groß und Benutzer klicken zu schnell , die diese Ausnahme verursachen kann.
m.edmondson
Wissen Sie, ob dies einen Fehler für den Benutzer oder nur einen versteckten Fehler verursacht?
Webnoob
2
Meine eigenen Untersuchungen dazu zeigen, dass der Benutzer nichts Außergewöhnliches sieht. Haben Sie Beschwerden von Kunden / Kunden gehabt?
m.edmondson
2
Nein keine. Danke für die Hilfe.
Webnoob
29

Wie m.edmondson erwähnte : "Der Remote-Host hat die Verbindung geschlossen." tritt auf, wenn ein Benutzer oder Browser etwas abbricht oder die Netzwerkverbindung unterbrochen wird usw. Es muss jedoch nicht unbedingt ein Dateidownload sein, sondern nur eine Anforderung einer Ressource, die zu einer Antwort an den Client führt. Grundsätzlich bedeutet der Fehler, dass die Antwort nicht gesendet werden konnte, da der Server nicht mehr mit dem Client (Browser) kommunizieren kann.

Es gibt eine Reihe von Schritten, die Sie unternehmen können, um dies zu verhindern. Wenn Sie in der Antwort manuell etwas mit Response.Write, Response.Flush senden, Daten von einer Webdienst- / Seitenmethode oder ähnlichem zurückgeben, sollten Sie Response.IsClientConnected überprüfen, bevor Sie die Antwort senden. Wenn die Antwort wahrscheinlich lange dauert oder viel serverseitige Verarbeitung erforderlich ist, sollten Sie dies regelmäßig überprüfen, bis die Antwort endet, wenn sie aufgerufen wird. Einzelheiten zu dieser Eigenschaft finden Sie im Folgenden:

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.isclientconnected.aspx

Alternativ, was meiner Meinung nach in Ihrem Fall am wahrscheinlichsten ist, wird der Fehler durch etwas innerhalb des Frameworks verursacht. Der folgende Link kann von Nutzen sein:

http://blog.whitesites.com/fixing-The-remote-host-closed-the-connection-The-error-code-is-0x80070057__633882307305519259_blog.htm

Der folgende Stapelüberlaufpfosten könnte ebenfalls von Interesse sein:

"Der Remote-Host hat die Verbindung geschlossen" in Response.OutputStream.Write

Sam Shiles
quelle
2
Big Ups für die Response.IsClientConnected!
Stumblor
10

Man kann den Fehler mit dem folgenden Code reproduzieren:

public ActionResult ClosingTheConnectionAction(){
   try
   {
      //we need to set buffer to false to
      //make sure data is written in chunks
      Response.Buffer = false;  
      var someText = "Some text here to make things happen ;-)";
      var content = GetBytes( someText );

      for(var i=0; i < 100; i++)
      {
         Response.OutputStream.Write(content, 0, content.Length);
      }

      return View();
   }
   catch(HttpException hex)
   {
      if (hex.Message.StartsWith("The remote host closed the connection. The error code is 0x800704CD."))
            {
                //react on remote host closed the connection exception.
                var msg = hex.Message;
            }  
   }
   catch(Exception somethingElseHappened)
   {
      //handle it with some other code
   }

   return View();
} 

Führen Sie nun die Website im Debug-Modus aus. Fügen Sie einen Haltepunkt in die Schleife ein, die in den Ausgabestream schreibt. Gehen Sie zu dieser Aktionsmethode und schließen Sie nach der ersten Iteration die Registerkarte des Browsers. Drücken Sie F10, um die Schleife fortzusetzen. Nachdem es die nächste Iteration getroffen hat, sehen Sie die Ausnahme. Genieße deine Ausnahme :-)

Jaroslaw Jakowlew
quelle
2

Ich habe dies auf einer asp.net 2.0 iis7 Windows2008-Site erhalten. Der gleiche Code auf iis6 hat gut funktioniert. Es verursachte ein Problem für mich, weil es den Anmeldevorgang durcheinander brachte. Der Benutzer würde sich anmelden und eine 302 in default.asxp erhalten, die über page_load gelangen würde, jedoch nicht so weit wie vor dem Rendern, bevor iis7 eine 302 ohne das Auth-Cookie an login.aspx zurücksenden würde. Ich habe angefangen, mit App-Pool-Einstellungen zu spielen, und aus irgendeinem Grund scheint "32-Bit-Anwendungen aktivieren" das Problem behoben zu haben. Keine Ahnung warum, da diese Seite nichts Besonderes macht, für das 32-Bit-Treiber erforderlich sein sollten. Wir haben einige Sites, die noch Access verwenden und 32-Bit benötigen, aber nicht unsere direkten SQL-Sites wie diese.

Rich Wilson
quelle
Das Aktivieren von 32-Bit-Anwendungen hat dies auch für mich behoben. Vielen Dank !
Praneet Nadkar
Das Aktivieren der 32-Bit-Anwendung kann dazu führen, dass die Anwendung weniger Speicher benötigt, was möglicherweise darauf hinweist, dass auf dem Server ein Speicherproblem vorliegt. Dies könnte auch ein ganz anderes Problem sein.
Jahu
2

Ich habe diesen Fehler erhalten, als ich dynamisch Daten von a gelesen WebRequestund die nie geschlossen habe Response.

    protected System.IO.Stream GetStream(string url)
    {
        try
        {
            System.IO.Stream stream = null;
            var request = System.Net.WebRequest.Create(url);
            var response = request.GetResponse();

            if (response != null) {
                stream = response.GetResponseStream();

                // I never closed the response thus resulting in the error
                response.Close(); 
            }
            response = null;
            request = null;

            return stream;
        }
        catch (Exception) { }
        return null;
    }
Clarice Bouwer
quelle
1

Ich habe auch den gleichen Fehler auf meinem Image-Handler, den ich geschrieben habe. Ich habe es 30 Mal am Tag vor Ort mit starkem Verkehr bekommen und es auch reproduziert. Sie erhalten dies, wenn ein Benutzer die Anforderung abbricht (schließt die Seite oder seine Internetverbindung wird beispielsweise unterbrochen), in meinem Fall in der folgenden Zeile:

myContext.Response.OutputStream.Write(buffer, 0, bytesRead);

Ich kann mir keine Möglichkeit vorstellen, dies zu verhindern, aber vielleicht können Sie damit richtig umgehen. Ex:

        try
        {
            …
            myContext.Response.OutputStream.Write(buffer, 0, bytesRead);
            …
        }catch (HttpException ex)
        {
            if (ex.Message.StartsWith("The remote host closed the connection."))
                ;//do nothing
            else
                //handle other errors
        }            
        catch (Exception e)
        {
            //handle other errors
        }
        finally
        {//close streams etc..
        }
Robert Benyi
quelle
4
Dies schlägt kläglich fehl, wenn die Serverkultur nicht Englisch ist (da die Nachricht in einer anderen Sprache verfasst wäre). Verwenden Sie einfach die ErrorCodeEigenschaft der Ausnahme (die 2147943629, HRESULT 0x800704CD entsprechen sollte).
Ronald
4
Korrektur: Die ErrorCodefür HRESULT 0x800704CD ist -2147023667.
Ronald
Ich habe noch nie eine nicht-englische Serverkultur verwendet, aber ich sehe Ihr Problem.
Trotzdem