部分虚拟主机客户时常出现MAC验证失败错误之解决方法

作者:动易网络 来源:本站原创 点击数: 发布时间:2008年05月26日
问题:在安装成功数据库一步后,出现错误:


   

“/”应用程序中的服务器错误。

验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
   

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Web.HttpException: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。

源错误:


只有在调试模式下进行编译时,生成此未处理异常的源代码才会显示出来。若要启用此功能,请执行以下步骤之一,然后请求 URL:

1. 在产生错误的文件的顶部添加一条“Debug=true”指令。例如:

  <%@ Page Language="C#" Debug="true" %>

或:

2. 将以下的节添加到应用程序的配置文件中:







请注意,第二个步骤将使给定应用程序中的所有文件在调试模式下进行编译;第一个步骤仅使该特定文件在调试模式下进行编译。

重要事项: 以调试模式运行应用程序一定会产生内存/性能系统开销。在部署到生产方案之前,应确保应用程序调试已禁用。

        

 

解决方法:因为.NET在对客户端数据与服务器间传送过程中,需要对数据进行加密与解密,而加密与解密算法可以在web.config里进行配置,在web.config中,validationKey和decryptionKey的默认值是AutoGenerate,由系统随机生成密钥,如果在本地或者使用的是独立主机通常不会有什么问题,但是使用虚拟主机,一台服务器上有多个虚拟主机存在时就会出现以上问题,MSDN中也特别指出不能在群集中使用 AutoGenerate应该指定固定的密钥值,这就需要在web.config中添加关于machineKey的配置项,并手动设置其中的密钥值,这里请注意,不同加密算法对于密钥的最大字符长度是不同的,在这里能够使用的有AES,DES,3DES,SHA1,MD5,我只知道DES的密钥字符长度为16,3DES长度为48,手动设置时密钥长度必须等于其最大长度,否则会出错!至于密钥的16进制值可以随便输入。

具体操作方法如下:

找到网站运行根目录下的web.config文件,如下图加亮行所示加上相应的项。设置时,请自行修改KEY值,这关系到服务器的加密安全。图片看不清晰请点击图片查看。

代码:
图片点击可在新窗口打开查看

 

注意:上面的key值请不要直接复制,这样会存在安全问题,请生成自己的KEY值。

生成key值工具下载:点击下载      (任意生成一个KEY值即可)

 

 

论坛地址: