ASP.NET/FireFox-状态信息对此页面无效,可能已损坏



我花了大约两天的时间研究这个问题,似乎找不到解决方案,或者提供的解决方案似乎没有完全解决我遇到的问题。

  • 我有一个ASP.NET应用程序,.NET 4.0
  • 偶尔,我们会收到有关View State腐败的错误
  • 这似乎只适用于基于Mozilla的浏览器(不是100%确定,试图获得更多的错误日志来确认(
  • 它似乎从没有一致的可重复生产的行动开始
  • 这与MAC不同步无关,我们明确设置了机器密钥/验证密钥,而不是设置为自动生成
  • 它只发生在我们的生产环境中,从未发生在DEV/QAT/UAT中
  • 这种情况发生在有更新面板的页面上——虽然有些页面的视图状态非常大,但也有一些页面的视图视图状态非常小
  • 似乎无法重新生产。我发现的一些解决方案与"单击一个页面,单击转到另一个页面的按钮,在浏览器中单击返回,错误就会发生"有关——事实并非如此
  • IIS7在Windows Enterprise 2008上,16GB内存,PAE已启用
  • 页面将正常工作一段时间,然后停止工作-重新启动IIS可以暂时解决此问题
  • 这不是在Web场上运行的异常/堆栈跟踪:

描述:

Error occurred System.Web.HttpException (0x80004005): The state information is invalid for this page and might be corrupted. ---> System.Web.UI.ViewStateException: Invalid viewstate.
Client IP: <removed>
Port: 21884
Referer: <removed>
Path: /PathToPage/Page.aspx
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; MS-RTC LM 8)
ViewState: /wEPDwULLTEyNTU4MDc4NT....<removed by user>... ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Convert.FromBase64String(String s)
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
at System.Web.UI.HiddenFieldPageStatePersister.Load()
--- End of inner exception stack trace ---
at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
at System.Web.UI.ViewStateException.ThrowViewStateError(Exception inner, String persistedState)
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)

因为这个问题只发生在更新面板页面上,我怀疑你在更新面板后出现了破坏视图状态的错误,你根本没有捕捉到,也看不到这个错误。

要找到它们,一个临时解决方案是删除更新面板,看看是否有任何错误。

第二种解决方案是压缩和剪切视图状态的较小部分,以防中间的某个代理或路由器破坏其状态。

更多内容请阅读:ASP.Net Post超时和CryptographicException:填充无效且无法删除,视图状态MAC验证失败

最新更新