什么可能导致“客户端断开连接”ASP.NET异常?

时间:2009-04-30 22:25:19

标签: asp.net iis-6 windows-server-2003 load-balancing

我的.NET 3.5应用程序偶尔抛出以下异常System.Web异常:

  

客户端已断开连接

为什么会发生此异常?我的应用程序在负载均衡的Windows Server 2003 IIS 6.0服务器上运行。

6 个答案:

答案 0 :(得分:31)

vbdork.net域似乎现在已经不存在了。在搜索此错误时,我发现了几篇对本文的引用。所以我发现了谷歌的缓存版本,我现在将其发布在这里以供参考。原始网址为:http://vbdork.net/post/2009/02/10/The-client-disconnected.aspx

  

您收到消息客户端已断开连接。

     

如果您在Web场中并且有一个用户可以进行多项选择的页面,您可能偶尔会收到此错误消息,这通常发生在这种情况下:

     

用户选择在回发时有事件的下拉列表框,但用户在将请求发送回用户之前再次执行此操作,用户现在正在创建在其他Web服务器上触发的第二个事件,之前的Web服务器尝试将旧事件的结果返回给用户,但用户不再存在,因为用户现在位于其他Web服务器上。

     

用户永远不会看到错误,但是如果你正在捕捉错误并通过电子邮件发送/记录它们,你会看到它们如下所示,并且完全受挫。不要担心它,只要忽略它甚至不是问题,只要你捕获这种错误就不会出错。

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)

答案 1 :(得分:7)

也许是因为“客户端断开连接”......

关闭浏览器,导航到新页面,厌倦了等待应用加载......

严肃地说,请查看this page以获取有关该问题的大量信息。

总而言之,这种情况正在发生,因为浏览器正在启动一个新请求,该请求在第一个服务器处理原始请求时跳转到第二个服务器。他的建议就是忽略它。

我的建议是弄清楚为什么你的负载均衡器没有在后续请求中将客户端固定到同一服务器上;也被称为“粘性”会议。

答案 2 :(得分:4)

如果您使用的是Telerik组件,请删除RadCompression模块。

答案 3 :(得分:2)

同样在类似问题上查看this answer。在这种情况下没有网络农场。

  

ViewState变为“大”并且用户在上一个请求完成之前单击按钮时,抛出此异常。 [...]这很容易发生,因为回发使用的是ajax,因此浏览器在ViewState发送到服务器时不会停止响应。

归功于Russell Clarvoe

答案 4 :(得分:0)

尝试通过在web.config中使用maxPageStateFieldLength将视图状态分块到多个字段来修复:

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

答案 5 :(得分:0)

其他可能的原因: 您正在使用实际上不支持Ajax的控件。 Ajax应该能够处理异步请求,但是某些控件不起作用,例如telerik(ajax)树视图。 (等待telerik互联网警察像往常一样审查这个糟糕的宣传。)