Recibo correos electrónicos de error de mi sitio web cada vez que ocurre una excepción. Recibo este error:
El host remoto cerró la conexión. El código de error es 0x800704CD
y no sé por qué. Recibo alrededor de 30 al día. Tampoco puedo reproducir el error, por lo que no puedo localizar el problema.
El sitio web es ASP.NET 2 que se ejecuta en IIS7.
Seguimiento de pila:
en System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError (resultado Int32, booleano throwOnDisconnect) en System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush () en System.Web.HttpResponse.Flush (Boolean finalFlushse.Hesblushp. ) en System.Web.HttpResponse.End () en System.Web.UI.HttpResponseWrapper.System.Web.UI.IHttpResponse.End () en System.Web.UI.PageRequestManager.OnPageError (Remitente de objeto, EventArgs e) en .Web.UI.TemplateControl.OnError (EventArgs e) en System.Web.UI.Page.HandleError (Exception e) en System.Web.UI.Page.ProcessRequestMain (booleano includeStagesBeforeAsyncPoint, booleano includeStagesAfterAsyncPoint.UI) en System. Page.ProcessRequest (booleano includeStagesBeforeAsyncPoint, booleano includeStagesAfterAsyncPoint) en System.Web.UI.Page.ProcessRequest () en System.Web.UI.Page.ProcessRequestWithNoAssert (contexto HttpContext) en System.Web.UI.Page.ProcessRequest (contexto HttpContext) en ASP.default_aspx.ProcessRequest (contexto HttpContext) en System.Web.Application.HttpApplication.CallHandlerExecutionStep.Http IExecutionStep.Execute () en System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, booleano y completadoSincrónicamente)
System.Web.HttpResponse.Flush()
significa cualquier tipo de respuesta. Acabo de encontrar esto , puede ayudarlo a llegar a la ruta del problema donde viewstate es muy grande y los usuarios hacen clic demasiado rápido, lo que puede causar esta excepción.Como mencionó m.edmondson , "El host remoto cerró la conexión". ocurre cuando un usuario o navegador cancela algo , o la conexión de red se interrumpe, etc. Sin embargo, no necesariamente tiene que ser una descarga de archivo, solo cualquier solicitud de cualquier recurso que resulte en una respuesta al cliente. Básicamente, el error significa que la respuesta no se pudo enviar porque el servidor ya no puede hablar con el cliente (navegador).
Hay una serie de pasos que puede tomar para evitar que suceda. Si está enviando manualmente algo en la respuesta con un Response.Write, Response.Flush, devolviendo datos de un método de página / servicio web o algo similar, entonces debería considerar verificar Response.IsClientConnected antes de enviar la respuesta. Además, si es probable que la respuesta tarde mucho tiempo o se requiera mucho procesamiento del lado del servidor, debe verificar esto periódicamente hasta que se llame a response.end. Consulte lo siguiente para obtener detalles sobre esta propiedad:
http://msdn.microsoft.com/en-us/library/system.web.httpresponse.isclientconnected.aspx
Alternativamente, lo que creo que es más probable en su caso, el error es causado por algo dentro del marco. El siguiente enlace puede ser de utilidad:
http://blog.whitesites.com/fixing-The-remote-host-closed-the-connection-The-error-code-is-0x80070057__633882307305519259_blog.htm
La siguiente publicación de desbordamiento de pila también puede ser de interés:
"El host remoto cerró la conexión" en Response.OutputStream.Write
fuente
Response.IsClientConnected
!Se puede reproducir el error con el siguiente código:
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(); }
Ahora ejecute el sitio web en modo de depuración. Coloque un punto de interrupción en el bucle que escribe en el flujo de salida. Vaya a ese método de acción y después de que pase la primera iteración cierre la pestaña del navegador. Presione F10 para continuar el bucle. Después de que llegue a la siguiente iteración, verá la excepción. Disfruta tu excepción :-)
fuente
Recibí esto en un sitio asp.net 2.0 iis7 Windows2008. El mismo código en iis6 funcionó bien. Me estaba causando un problema porque estaba arruinando el proceso de inicio de sesión. El usuario iniciaría sesión y obtendría un 302 en default.asxp, que llegaría a través de page_load, pero no hasta el pre-renderizado antes de que iis7 enviara un 302 a login.aspx sin la cookie de autenticación. Comencé a jugar con la configuración del grupo de aplicaciones y, por alguna razón, 'habilitar aplicaciones de 32 bits' parece haberlo solucionado. No tengo idea de por qué, ya que este sitio no está haciendo nada especial que deba requerir controladores de 32 bits. Tenemos algunos sitios que todavía usan Access que requieren 32 bits, pero no nuestros sitios SQL directos como este.
fuente
Recibí este error cuando leí datos dinámicamente de a
WebRequest
y nunca cerré elResponse
.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; }
fuente
Yo también recibí este mismo error en mi controlador de imágenes que escribí. Lo conseguí como 30 veces al día en el sitio con mucho tráfico, logré reproducirlo también. Obtienes esto cuando un usuario cancela la solicitud (cierra la página o se interrumpe su conexión a internet por ejemplo), en mi caso en la siguiente fila:
myContext.Response.OutputStream.Write(buffer, 0, bytesRead);
No puedo pensar en ninguna forma de prevenirlo, pero tal vez puedas manejar esto adecuadamente. 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.. }
fuente
ErrorCode
propiedad de la excepción (que debería ser igual a 2147943629, HRESULT 0x800704CD).ErrorCode
para HRESULT 0x800704CD es-2147023667
.