【问题标题】:ASP.NET/FireFox - The state information is invalid for this page and might be corruptedASP.NET/FireFox - 此页面的状态信息无效并且可能已损坏
【发布时间】:2011-07-05 23:18:07
【问题描述】:

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

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

说明:

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 firefox viewstate


    【解决方案1】:

    因为这个问题只发生在更新面板页面上,我怀疑你在更新面板后会出现错误,破坏了视图状态,而你只是没有抓住,你看不到这个错误。

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

    第二种解决方案是压缩和切割视图状态,以防中间的某些代理或路由器破坏它。

    更多内容:ASP.Net Post timeoutCryptographicException: Padding is invalid and cannot be removed and Validation of viewstate MAC failed

    【讨论】:

    • 上次出现这个错误时,我从生产分支获取了一份代码副本,将其指向生产数据库并在本地运行(相同的代码库,相同的数据库)。转到导致用户错误的屏幕/实体,重复操作,一切正常。登录生产网站,在 FireFox 中重复该操作 - 它崩溃了。一段时间内也可以正常工作(过去是一个月以上,现在在几天内发生了几次。没有应用环境更改)。
    • @TimMan 这听起来也像是 gzip 失败。如果您在页面的某些部分设置了内容长度,只需将其删除,然后再次测试。如果在发送页面后再次发生 gzip,则此 content-length 可能为 false,这会导致 firefox 崩溃。崩溃是因为页面内容长度错误,gzip报错,firefox崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多