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)
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.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
quelle
Response.IsClientConnected
!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 :-)
quelle
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.
quelle
Ich habe diesen Fehler erhalten, als ich dynamisch Daten von a gelesen
WebRequest
und die nie geschlossen habeResponse
.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; }
quelle
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.. }
quelle
ErrorCode
Eigenschaft der Ausnahme (die 2147943629, HRESULT 0x800704CD entsprechen sollte).ErrorCode
für HRESULT 0x800704CD ist-2147023667
.