在ASP.Net中,我有时会收到以下错误 - Viewstate验证失败。原因:视图状态提供了完整性检查失败

时间:2009-03-16 13:09:17

标签: asp.net visual-studio iis iis-7 viewstate

背景:我在C#中使用ASP.Net 3.5开发了一个Web应用程序。它运行良好,但现在有一些用户报告他们有时收到错误。我试图复制错误,但一直很难。有一次,当我让应用程序坐下时,我后来回来并尝试移动它并且它出错了。我认为这与超时有关,但我使用的是视图状态。

有什么想法吗?当我查看eventLog时,我确实看到了以下错误条目。

感谢您的帮助和想法!

约翰


我的事件日志有以下错误:

活动代码:4005

事件消息:请求的表单身份验证失败。原因:提供的故障单已过期。

活动时间:2008年3月14日13:19:26

活动时间(UTC):14/03/2008 13:19:26

事件ID:d9f0333c2eed46e0b0207da69d2ea70e

事件顺序:154

事件发生:5

活动详情代码:50202


活动代码:3005

事件消息:发生了未处理的异常。

活动时间:3/12/2009 7:49:59 AM

活动时间(UTC):3/12/2009 11:49:59 AM

事件ID:590ac0f6ad734d988e9e02f0fb7800eb

事件顺序:52

事件发生:1

活动详情代码:0

申请信息:

Application domain: /LM/W3SVC/32/ROOT-1-128813294498061103 

Trust level: Full 

Application Virtual Path: / 

Application Path: C:\Home\LocalUser\ucpga\Web\ 

Machine name: 169349-WEB2 

流程信息:

Process ID: 6912 

Process name: w3wp.exe 

Account name: NT AUTHORITY\NETWORK SERVICE 

这是最新的错误:

活动代码:4009 事件消息:Viewstate验证失败。原因:视图状态提供了完整性检查失败。 活动时间:2009年3月15日10:26:27 PM 活动时间(UTC):3/16/2009 2:26:27 AM 事件ID:3b5be134005e49c3b40400bcaa5cb48d 事件顺序:56 事件发生:1 活动详情代码:50203

申请信息:     应用领域:/ LM / W3SVC / 32 / ROOT-1-128816433841748972     信任等级:完整     应用虚拟路径:/     应用程序路径:C:\ Home \ LocalUser \ ucpga \ Web \     机器名称:169349-WEB2

流程信息:     进程ID:8892     进程名称:w3wp.exe     帐户名称:NT AUTHORITY \ NETWORK SERVICE

请求信息:     请求网址:https://hr.ucpga.org:443/application.aspx     请求路径:/application.aspx     用户主机地址:74.160.64.222     用户:
    经过身份验证:错误     验证类型:
    线程帐户名称:169349-WEB2 \ ucpga

ViewStateException信息:     异常消息:无效的视图状态。     客户IP:74.160.64.222     港口:1251     User-Agent:Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 5.1; GTB5; .NET CLR 1.1.4322; InfoPath.1)

4 个答案:

答案 0 :(得分:10)

此问题通常是由服务器的<machineKey />文件中自动生成的machine.config密钥引起的。每次重新启动应用程序时,它都会生成新密钥。这会使任何现有的加密视图状态或表单身份验证票证无效。

尝试将<machineKey /> validationKeydecryptionKey设置为固定值。有关更多信息,请参阅以下链接:

  

How To: Configure MachineKey in ASP.NET 2.0 (MSDN)

答案 1 :(得分:2)

我强烈怀疑这个问题是否与Viewstate有关。它更多地与会话状态和身份验证cookie有关。

您的应用程序是否在Web场/花园上运行?如果是这样,你应该看看this article

如果不是,如果您的FormsAuthenticationTicket超时小于会话超时,则通常会发生此错误。发生的情况是Auth票证的到期时间早于用户的会话,并且下一个请求无法进行身份验证。

答案 2 :(得分:1)

这看起来像是身份验证问题。您可能在验证票证上设置了超时,该超时设置即将到期。如果您使用滑动超时,则每次敲击服务器时都会更新故障单。如果你不这样做,你的门票就会过期,你需要处理这个案子。


编辑:

您可以查看此support文章,了解它是否适​​用于您。

此外,您可以查看此view state viewer可能有助于您确定视图状态是否无效。

这是另一个好post from a Microsoft Escalation Engineer

答案 3 :(得分:1)

我也有这个错误......

如果您查看错误,可能是您的加密URL查询字符串。会发生什么是webresource.axd生成的URL字符串具有使用machinekey设置加密的标识。这些过期,如果您有一个页面,然后尝试使用加密的字符串提交,则会触发事件ID 1316或4009。您可能在Application_Error事件中捕获此异常,并检查是否已触发CryptographicException。