由于应用程序池空闲超时导致视图状态MAC验证失败

时间:2014-09-29 09:31:10

标签: asp.net viewstate

我在线购买了一个网络域名,我在这里托管了asp.net 网站&web-application&#39>

我多次遇到错误:

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster......

经过长时间的研究后,我发现错误是由于"应用程序池空闲超时" 而发生的。

默认情况下,应用程序池将每5分钟回收一次。如果在用户忙于网站并将帖子发送回服务器时发生此循环,则服务器不再识别会话/视图状态并拒绝回发的内容。

我的"应用程序池空闲超时"价值在 5分钟附近。这太短了。

我已经联系了域名人员以更改超时期限,但是他们拒绝这样做,说明所有人都一样,并且无法更改。

我搜索了其他解决方案并找到了以下解决方案:

  1. 将EnableViewStateMAC属性设置为false(不太好w.r.t.安全原因)。
  2. 提供您自己的验证和解密密钥"" (没有用)。
  3. 请尽快为我提供更好的解决方案。

    或者我应该更改域管理器(如godaddy.com)。

1 个答案:

答案 0 :(得分:0)

我过去曾见过并解决了这个问题。当您在Web场或Web群集上托管应用程序时,主要出现此问题。

呈现页面时,其视图状态在服务器上加密并发送到客户端。回发页面时,此视图状态数据在服务器上解密以获取页面状态。对于viewState服务器的加密和解密,使用一些密钥(如果Maching.config文件中未提供这些密钥)由服务器即时生成。

如果您使用的是单个服务器托管环境,则这些密钥可能会被回收。但是在Web场或Web群集中,如果这些密钥是随机生成的,那么它们对于每个服务器都是不同的,并且来自一个服务器的请求可以发回到具有不同密钥集的另一个服务器以及它失败的位置。

解决方法是将MachineKey条目添加到所有服务器的Machine.Config文件或应用程序的web.config文件中,以便每个服务器使用相同的密钥来加密和解密视图状态。