asp.net iis-6 windows-server-2003 load-balancing

¿Qué podría estar causando la excepción ASP.NET "El cliente desconectado"?



iis-6 windows-server-2003 (6)

Mi aplicación .NET 3.5 lanza esporádicamente la siguiente excepción System.Web:

El cliente desconectado

¿Por qué ocurre esta excepción? Mi aplicación se ejecuta en un servidor de Windows Server 2003 IIS 6.0 con equilibrio de carga.


El dominio vbdork.net parece haber desaparecido. Al buscar este error, encontré varias referencias a este artículo. Así que encontré una versión en caché de Google y ahora estoy publicando aquí como referencia. La URL original era: http://vbdork.net/post/2009/02/10/The-client-disconnected.aspx

Recibe el mensaje El cliente desconectado.

Es probable que obtenga esporádicamente este mensaje de error si se encuentra en una granja de servidores web y tiene una página donde el usuario puede realizar selecciones múltiples, por lo general ocurre en este escenario:

El usuario selecciona un cuadro de lista desplegable que tiene un evento en la devolución de datos, pero el usuario lo hace de nuevo antes de que la solicitud se envíe de vuelta al usuario, el usuario ahora está creando un segundo evento que se está disparando en el otro servidor web, el anterior webserver intenta devolver los resultados del evento anterior al usuario, pero el usuario ya no está allí porque el usuario está ahora en el otro servidor web.

El usuario nunca verá un error, pero si detecta los errores y los envía por correo electrónico o lo registra, los verá como se muestra a continuación y se sentirá totalmente frustrado. No te preocupes, simplemente ignóralo, ni siquiera es un problema, siempre y cuando atrapes este tipo de error, nada saldrá mal.

Type : System.Web.HttpException, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Message : The client disconnected. Source : System.Web Help link : ErrorCode : -2147467259 Data : System.Collections.ListDictionaryInternal TargetSite : Void ThrowError(System.Exception, System.String, System.String, Boolean) Stack Trace : at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) at System.Web.UI.HiddenFieldPageStatePersister.Load() at System.Web.UI.Page.LoadPageStateFromPersistenceMedium() at System.Web.UI.Page.LoadAllState() 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.ProcessRequestWithNoAssert(HttpContext context) at System.Web.UI.Page.ProcessRequest(HttpContext context) at ASP.src_rptprefs_chainhierarchy_aspx.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) Inner Exception --------------- Type : System.Web.UI.ViewStateException, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Message : Invalid viewstate. Client IP: 10.21.4.8 Port: 46784 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 1.1.4322; MS-RTC LM 8)


Otras causas posibles: estás usando controles que no son compatibles con Ajax en realidad. Se supone que Ajax puede manejar solicitudes asíncronas, pero algunos controles no funcionan, como la vista de árbol telerik (ajax). (Esperando que la policía telerik de Internet venga a censurar esta mala publicidad, como siempre).


Si está utilizando componentes de Telerik, deshágase del módulo RadCompression.


Tal vez porque el "cliente desconectado" ...

Navegador cerrado, navegando a una nueva página, cansado de esperar a que la aplicación se cargue ...

Con toda seriedad, revisa http://vbdork.net/post/2009/02/10/The-client-disconnected.aspx para obtener mucha información sobre ese problema.

En resumen, está sucediendo porque el navegador está iniciando una nueva solicitud que rebota al segundo servidor mientras el primer servidor está procesando la solicitud original. Su consejo es simplemente ignorarlo.

Mi consejo sería averiguar por qué su equilibrador de carga no mantiene al cliente conectado al mismo servidor en las solicitudes posteriores; también se llama sesiones "adhesivas".


También mira esta respuesta en una pregunta similar. No hay una granja web en ese caso.

Esta excepción se produce cuando el ViewState se vuelve "grande" y el usuario hace clic en un botón antes de que se complete una solicitud anterior. [...] Esto sucede muy fácilmente porque la publicación de devolución está usando ajax, por lo que el navegador no deja de responder mientras el ViewState se envía al servidor.

Crédito a Russell Clarvoe


intente arreglarlo dividiendo el viewstate en múltiples campos usando maxPageStateFieldLength en el web.config:

<pages enableSessionState="true" enableViewState="true" enableViewStateMac="true" validateRequest="false" maxPageStateFieldLength="20">