2011-11-27 156 views
14

estoy usando elmah ->Elmah.axd en mi proyecto para encontrar errores.
hay un error como este:El host remoto cerró la conexión Error, ¿cómo arreglarlo?

System.Web.HttpException: The remote host closed the connection. The error code is 0x800703E3. 
Generated: Sun, 27 Nov 2011 13:06:13 GMT 

System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.Web.HttpException (0x800703E3): The remote host closed the connection. The error code is 0x800703E3. 
    at System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError(Int32 result, Boolean throwOnDisconnect) 
    at System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush() 
    at System.Web.HttpResponse.Flush(Boolean finalFlush) 
    at System.Web.HttpWriter.TransmitFile(String filename, Int64 offset, Int64 size, Boolean isImpersonating, Boolean supportsLongTransmitFile) 
    at System.Web.HttpResponse.TransmitFile(String filename, Int64 offset, Int64 length) 
    at SalarSoft.Utility.SP1.ResumeDownload.ProcessDownload(String fileName, String headerFileName) 
    at NiceFileExplorer.en.Download.DownloadFile_SalarSoft(String fileName) 
    at NiceFileExplorer.en.Download.GoForDownloadFile(String filepath) 
    at NiceFileExplorer.en.Download.MainCodes() 
    at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) 
    at System.Web.UI.Control.LoadRecursive() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.HandleError(Exception e) 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest() 
    at System.Web.UI.Page.ProcessRequest(HttpContext context) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

durante el trabajo con el sitio web, no vemos este error.
pero elmah me envía este error muchas veces.
¿Qué significa este error y cómo puedo solucionarlo?

EDIT 1
{mi sitio web es para archivos móviles downlaod y algunas veces está muy ocupado}
{i estoy usando Windows Server 2008 R2-> acceso remoto}

EDIT 2 después del comentario
algunas de las ventanas de información y advertencias (no hay error) los registros de hoy son como a continuación:

advertencia

Un proceso que sirve al grupo de aplicaciones 'ASP.NET 4.0 (integrado)' superó los límites de tiempo durante el cierre. La identificación del proceso era '6764'.

advertencia

Un proceso de trabajo '3232' grupo de aplicaciones 'ASP.NET 4.0 (Integrado)' no pudo detener un canal de escucha para el protocolo 'http' en el tiempo asignado. El campo de datos contiene un error numérico.

advertencia

Un proceso para grupo de aplicaciones 'ASP.NET 4.0 (Integrado)' superó límites de tiempo durante el apagado. La identificación del proceso era '3928'.

+0

Debe averiguar por qué el host remoto está cerrando la conexión. –

+0

Tendría que buscar en el servidor. El registro de eventos de Windows en el servidor, por ejemplo; tal vez el registro de IIS. –

+0

@John Saunders Hola y gracias por sus comentarios, por favor vea mi EDIT 2. – MoonLight

Respuesta

23

Veo esto mucho en los registros de un sitio web que construí.

AFAIK esa excepción significa que el cliente rompió la conexión (fue a otra página/cerró el navegador) antes de que la página terminara de cargarse. Si el cliente está descargando un archivo, este error es aún más probable ya que tienen más tiempo para decidir salir/seguir.

El error no es visible para los usuarios *, así que lo acabo de eliminar de los registros de Elmah.

* El sitio permite solo a usuarios autenticados. Puedo ver de Elmah quién experimentó el error y cuándo. Le he preguntado a los usuarios y ninguna persona tiene alguna vez informó haber experimentado este error en el cliente.

+0

Hola Neil, entonces no hay nada de qué preocuparse. ¿No es así? – MoonLight

+0

sí. nada de que preocuparse. –

+0

@NeilThompson, ¿fuiste capaz de ocultar este tipo de error en Elmah? – eduardobr

2

Me encontré con esto hoy, y para mí, estaba sucediendo porque el socket agotó el tiempo de espera para enviar el lado remoto.

En este ejemplo, un cliente extremadamente (o deliberadamente) lento puede causar la excepción.

Elegí resolverlo aumentando el tiempo de espera de recepción en mis sockets, ya que quería dar soporte a algunos clientes más lentos específicos que estaban sujetos a impuestos con los altos requisitos de SSL.

0

Poco tarde para esta parte, pero en caso de que ayude a otros, Response.Close() estaba causando la excepción en mi situación.

Estaba viendo la excepción, descrita por el OP, capturada por Elmah.

esto ocurría debido al cierre de la respuesta (el código que estaba apoyando estaba escribiendo la secuencia de salida de respuesta):

Response.Flush(); 
Response.Close(); 
Response.End(); 

Extracción Response.Close(); detuvo la excepción de ser lanzado.

2

Encontré ese error cuando el usuario canceló la descarga de archivos. En el lado del servidor produce una excepción con el mensaje El host remoto cerró la conexión. El código de error es 0x800703E3. Sin embargo, la excepción no tiene ningún tipo diferenciado que pueda manejarse por separado.

En odrer para manejarlo en ASP.NET MVC adecuadamente he añadido un registrador de excepción:

public static class RegisterFilters 
{ 
    public static void Execute(HttpConfiguration configuration) 
    { 
     configuration.Services.Add(typeof(IExceptionLogger), new WebExceptionLogger()); 
    } 
} 

Y WebExceptionLogger implementación de la clase:

public class WebExceptionLogger : ExceptionLogger 
{ 
    private const int RequestCancelledByUserExceptionCode = -2147023901; 

    public override void Log(ExceptionLoggerContext context) 
    { 
     var dependencyScope = context.Request.GetDependencyScope(); 
     var loggerFactory = dependencyScope.GetService(typeof(ILoggerFactory)) as ILoggerFactory; 
     if (loggerFactory == null) 
     { 
      throw new IoCResolutionException<ILoggerFactory>(); 
     } 

     var logger = loggerFactory.GetTechnicalLogger<WebExceptionLogger>(); 
     if (context.Exception.HResult == RequestCancelledByUserExceptionCode) 
     { 
      logger.Info($"Request to url {context.Request.RequestUri} was cancelled by user."); 
     } 
     else 
     { 
      logger.Error("An unhandled exception has occured", context.Exception); 
     } 
    } 
} 

me di cuenta de que este tipo de error specifict tiene HResult = -2147023901, entonces esto es por lo que estoy filtrando.

Espero que esto ayude.

Cuestiones relacionadas