【问题标题】:Validation of viewstate MAC failed 50 times a dayviewstate MAC 的验证每天失败 50 次
【发布时间】:2011-10-05 11:29:57
【问题描述】:

好的,所以这个话题在互联网上并不新鲜,我明白了。但是我还没有找到解决我问题的解决方案。

问题是我一直在我的网站上发现这个异常。可能一天50次左右。 (请参阅下面的堆栈跟踪)

视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保配置指定相同的 validationKey 和验证算法。 AutoGenerate 不能在集群中使用。

我已经在我的 web.config 文件中预定义了一个机器密钥——这根本没有帮助。 然后我在某处读到我可能是由于加载缓慢引起的错误,但我正在记录页面加载时间,当发生此错误时,没有什么可怕的。 一些人建议禁用视图状态解密,但正如许多其他人所写的那样,这并不是真正的解决方案。

有人知道该怎么做吗?

堆栈跟踪:

at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
at System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState)
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() 
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.default_aspx.ProcessRequest(HttpContext context) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

【问题讨论】:

  • 您是在网络场还是集群中运行?有多台服务器?
  • 您是否尝试过捕获失败的视图状态并查看其中的内容?
  • 我刚刚在我的本地主机上调试时第一次收到错误,不知道为什么会这样想,但至少我可以说我的本地主机不在网络农场上。我没有尝试捕获 no,但我会调查一下!

标签: asp.net validation viewstate


【解决方案1】:

您需要在 web.config 中添加机器密钥

82AA3

原因是,在网络农场中,您看到的页面可能由与您回发到的机器不同的机器提供服务,并且视图状态/cookie 等的解密将不匹配,除非农场设置的所有者在他的农场中匹配机器密钥(不太可能)。在单服务器环境中,此密钥是自动生成的,但它并不重要,因为应用程序池始终知道自己的密钥

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多