【问题标题】:In ASP.Net, I sometimes get the following error - Viewstate verification failed. Reason: The viewstate supplied failed integrity check在 ASP.Net 中,我有时会收到以下错误 - Viewstate 验证失败。原因:视图状态提供的完整性检查失败
【发布时间】:2009-03-16 13:09:16
【问题描述】:

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

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

感谢您的帮助和想法!

约翰


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

事件代码:4005

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

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

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

事件 ID:d9f0333c2eed46e0b0207da69d2ea70e

事件顺序:154

事件发生次数:5

事件详情代码:50202


事件代码:3005

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

活动时间:2009 年 3 月 12 日上午 7:49:59

活动时间(UTC):2009 年 3 月 12 日上午 11:49:59

事件 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 验证失败。原因:视图状态提供的完整性检查失败。 活动时间:3/15/2009 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 用户代理:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 5.1;GTB5;.NET CLR 1.1.4322;InfoPath.1)

【问题讨论】:

  • 网站也在 IIS7 上运行
  • John 而不是添加带有附加信息的答案,您应该编辑和更新您的问题。这是 stackoverflow 上的标准……可以很容易地找到后面的问题/答案……

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      这看起来像是身份验证问题。您可能在即将到期的身份验证票上设置了超时。如果您使用滑动超时,那么每次您访问服务器时都会更新票证。如果你不这样做,你的票就会过期,你需要处理这种情况。


      编辑:

      您可以查看这篇support 文章,看看它是否适用于您。

      您也可以查看此view state viewer 可能会帮助您确定视图状态是否无效。

      这是另一个不错的post from a Microsoft Escalation Engineer

      【讨论】:

      • 应用程序也没有身份验证。我还应该设置表单身份验证标签吗?
      • 嗯,如果您没有身份验证,那么我不知道...该错误非常具体。你肯定你没有使用表单身份验证
      【解决方案4】:

      我也有这个错误....

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

      【讨论】:

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