1

在我们的网站(ASP.NET Forms,Sitecore 6.6)的日志文件中,我发现了很多视图状态异常。但是用户没有报告明显的问题。

这是一个例外,通过参考日志文件,我发现这个问题主要发生在具有 20KB 之类的 viewstate 的特定页面中。请帮忙解决这个问题。

5676 00:30:43 ERROR Application error. 
Exception: System.Web.HttpException 
Message: The client disconnected. 
Source: System.Web 
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(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
at System.Web.UI.Page.ProcessRequest() 
at System.Web.UI.Page.ProcessRequest(HttpContext context) 
at System.Web.UI.Page.ProcessRequest(HttpContext context) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Nested Exception 

Exception: System.Web.UI.ViewStateException 
Message: Invalid viewstate. 
Client IP: xxx.xxx.xxx.249 
Port: 53377 
Referer: <URL>
Path: /<PATH>
User-Agent: Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25 
ViewState: cT4jo/ieR1NMvyqfwH6MToZmW6E/oKO64RcFXyllzcXB84wiWN/j3WeRyXxUZWCnr9c6staUp76B0Zr7/IqYgWWS3qfiMu9xzpU61bB+TAjDz0IbVwSt0rvZoFh7M/tQGQWyRha4ieCH7B5wKu3hXexRTIWwvP0JLbNmnQyFnOdqTnJZXBYQtaTyzMva3Fy7Q9YNstymtd1XrO1WHvUsBS6CwyV8eUYZs3LWRvczf3Ixz2XRg2Y4fY4kpuXl+QJLkbhgnALcFeGe9ur1l8Gyq6EdhqRb0BOlK4ozKaq4hpUT6HWes9YP2DjCJCpa2wP47hqZ5DaAXrcN+R6UPOqYIl6TSIjNUCv35NPPozaFjItLGmZi6ee+PfxOSz4ejxgBJzV3KNf2/1Mr5GNI7uZWgw998CI0mtxtpuWjp5kZCAfKzSCX//Vv7030VBLAE4Gj1RYIek1WNuwDreglFE5Pt8uKMDOsJstt8tXGqyCVcxqQAnRyN51e3uuqbDvDL2yVXA6yv6QyaCD/XmIHcgz//HItyqlhEziyOx7MxwKzpMyLu/6g2poqKMoNWtnQwxw9JTVwijEf45Lai+BOmgMNITgyrmLDp7ioHgHFK0VSmrSxN2W+CBRyyXWfn3QAy8UQYpq1TdHEUnGbc3XTTfBYW/gj+mFGaEpM24hUi/gJBxU2r+/wG2XxHfsxgrq6kG5cM8Hzf4GHuSC4...

Nested Exception 

Exception: System.FormatException 
Message: Invalid length for a Base-64 char array or string. 
Source: mscorlib 
at System.Convert.FromBase64_Decode(Char* startInputPtr, Int32 inputLength, Byte* startDestPtr, Int32 destLength) 
at System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) 
at System.Convert.FromBase64String(String s) 
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString, Purpose purpose) 
at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter2 formatter, String serializedState, Purpose purpose) 
at System.Web.UI.HiddenFieldPageStatePersister.Load() 
4

2 回答 2

2

我们还在负载平衡服务器上看到了这一点,特别是在我们使用某种形式的 ajax 控件(ajax 控件工具包或自制)的页面上。问题似乎是客户调用某种形式的 ajax 请求,然后关闭浏览器或通过链接或浏览器后退/前进控件转到不同的页面。

如果您可以控制将响应发送给客户端的时间,您可以做的一件事是执行以下操作:

if(HttpContext.Current.Response.IsClientConnceted) {
    //Send response
}

这应该会从您的日志中删除错误。

于 2013-10-27T20:15:54.760 回答
1

我已经在我们的日志中看到同样的异常消息一段时间了,直到今天我才能够重现这个问题,所以我想我会分享我的经验。

在使用 Ajax 更新面板的页面上,用户可以首先加载页面。然后用户可以调用 Ajax 请求。如果用户调用另一个 Ajax 请求,但在第二个 Ajax 请求完成加载之前点击了后退按钮,则用户将被重定向到前一页并记录异常消息。

记录此消息时不会中断用户体验,因此用户不知道幕后发生了什么。异常消息在 ASP.Net 页面生命周期中如何处理视图状态方面是准确的。

我会说异常消息可以安全地忽略,您可能会找到一种解决方案来避免首先记录异常消息。

需要注意的是,添加机器密钥或解决 Web 服务器配置设置在任何情况下都对我没有帮助,这主要是因为在大多数情况下,我没有使用 Web 场。

于 2014-06-10T19:56:46.607 回答