虚拟服务器上ASP.NET 网站在打开时候出现如下错误:
Server Error in '/' Application
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
最简单的方法就是关闭视图状态运行消息验证检查,在页面@Page标签里设置enableViewStateMac="false"。
程序在本地运行网站是没问题的,因此排除掉程序代码的原因。后根据网上所查询的资料原来是在虚拟服务器上视图状态的验证问题(http://support.microsoft.com/kb/829743/zh-cn).
问题的主要信息如下:
- 当 ASP.NET 动态编译的文件时,文件生成到实质上是随机名称的程序集 (例如,文件名可能是 jp395dun.dll)。如果您正在运行 Web 场,相同的文件将被编译到程序集具有不同的随机名称中。通常情况下,这不是问题因为没有人对这些程序集名称进行假设。但如果您曾经将动态编译的类型视图状态使用二进制序列化,将视图状态数据中包括程序集的名称时,查看状态以后发送到不同的服务器,在 Web 场中,视图状态不能反序列化,因为它使用不同的程序集名称。
- 视图状态机器身份验证代码 (MAC) 功能的目的是使客户端能够发送包含恶意视图状态的请求。默认情况下,在以下标志 Machine.config 文件中启用此功能:enableViewStateMac="true"。
确定您要处理的问题与 MAC 功能的最简单方法是关闭该功能。若要执行此操作,请于下面的代码更改 Machine.config 文件中的标记:enableViewStateMac="false"。
如果您不再能够获取视图状态错误,则问题与 MAC 功能。
重要仅关闭视图状态 MAC 功能,以帮助诊断问题。您不应保存视图状态 MAC 功能关闭,要变通解决此问题。如果是这样,会导致安全漏洞。有关详细信息,请访问下面的 MSDN 网站:http://msdn2.microsoft.com/en-us/library/aa302388.aspx
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98285.html