2014-09-29 71 views
2

我已经在网上购买了一个网络域名,我在这里托管了asp.net 网站/网络应用程序的由于应用程序池空闲超时引起的视图状态MAC验证失败

很多时候,我面临着一个错误:

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

经过长期的研究后,我发现该错误的发生是由于“应用程序池空闲超时”

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

我的“应用程序池空闲超时”值大约为5分钟。太短。

我接触过的领域的人来改变超时时间,但他们拒绝这样做,并称其为所有相同的,不能改变。

我GOOGLE了其他的解决方案,发现以下解决方案:

  1. 设置EnableViewStateMAC属性设置为false(不太好w.r.t.安全原因)。
  2. 提供您自己的验证和解密密钥“”(不起作用)。

请尽快给我提供一个更好的解决方案。

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

回答

0

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

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

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

解决的办法是添加的machineKey条目所有服务器的machine.config文件,或应用程序的web.config文件,以便每个服务器用于加密和视图状态的解密相同的密钥。

+0

你能否给我提供一个例子... – Vishal 2014-12-15 20:01:14