web-dev-qa-db-fra.com

Quelle peut être la cause de l'exception ASP.NET "Le client déconnecté"?

Mon application .NET 3.5 lève sporadiquement l'exception suivante System.Web:

Le client déconnecté

Pourquoi cette exception se produit-elle? Mon application s'exécute sur un serveur Windows Server 2003 IIS 6.0 à charge équilibrée.

30
Michael Kniskern

Le domaine vbdork.net semble maintenant disparu. En cherchant sur cette erreur, j'ai trouvé plusieurs références à cet article. J'ai donc trouvé une version cachée de Google et la publie maintenant ici pour référence. L'URL d'origine était: http://vbdork.net/post/2009/02/10/The-client-disconnected.aspx

Vous obtenez le message Le client déconnecté.

Si vous êtes dans une batterie de serveurs Web et que vous avez une page sur laquelle l'utilisateur peut effectuer plusieurs sélections, il est probable que vous obtiendrez sporadiquement ce message d'erreur. Cela se produit généralement dans ce scénario: 

L'utilisateur sélectionne une zone de liste déroulante comportant un événement sur la publication, mais il le fait de nouveau avant que la demande ne lui soit renvoyée. L'utilisateur crée maintenant un deuxième événement déclenché sur l'autre serveur Web. Le serveur Web essaie de renvoyer les résultats de l'ancien événement à l'utilisateur, mais celui-ci n'y est plus car il se trouve maintenant sur l'autre serveur Web. 

L'utilisateur ne verra jamais d'erreur, mais si vous attrapez les erreurs et que vous les envoyez/les enregistrez, vous les verrez comme indiqué ci-dessous et vous serez totalement frustré. Ne vous inquiétez pas pour cela, ignorez-le, ce n'est même pas un problème, tant que vous piégerez ce genre d'erreur, rien ne se passera 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)
31
Paul Prewett

Peut-être parce que le "client déconnecté" ...

Navigateur fermé, navigation vers une nouvelle page, fatigué d'attendre le chargement de l'application ...

Sérieusement, consultez cette page pour de nombreuses informations sur ce problème.

En résumé, cela se produit parce que le navigateur lance une nouvelle demande qui rebondit sur le deuxième serveur pendant que le premier serveur traite la demande initiale. Son conseil est de simplement l'ignorer.

Mon conseil serait de comprendre pourquoi votre équilibreur de charge ne garde pas le client cloué sur le même serveur lors de demandes ultérieures; également appelé sessions "collantes".

7
NotMe

Si vous utilisez des composants Telerik, supprimez le module RadCompression.

4
Vladimir Kocjancic

Consultez également cette réponse sur une question similaire. Il n'y a pas de ferme Web dans ce cas.

Cette exception est levée lorsque la variable ViewState est devenue "grande" et que l'utilisateur a cliqué sur un bouton avant qu'une demande précédente ne soit terminée. [...] Cela se produit très facilement, car postback utilise ajax. Le navigateur n'arrête donc pas de répondre pendant l'envoi de la ViewState au serveur.

Crédit à Russell Clarvoe

2
Michael

essayez de résoudre le problème en divisant l'état viewstate en plusieurs champs à l'aide de maxPageStateFieldLength dans le fichier web.config:

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

Autres causes probables: Vous utilisez en réalité des contrôles qui ne prennent pas en charge Ajax. Ajax est censé être capable de gérer les demandes asynchrones, mais certains contrôles ne fonctionnent pas, tel que le telerik. (ajax) treeview. (En attendant que la police Internet telerik vienne censurer cette mauvaise publicité, comme d'habitude.)

0
NNM