Asp.net web场中的Viewstate验证失败-已消除常见怀疑

Asp.net web场中的Viewstate验证失败-已消除常见怀疑,asp.net,viewstate,machinekey,Asp.net,Viewstate,Machinekey,我想我已经试过了这个问题的所有标准答案,我知道我已经阅读了数百个关于这个问题的问题和帖子,但是没有一个似乎已经解决了这个问题,也没有一个能够解释我的场景中的原因。(我只剩5个小时了,没有更近的距离:-() 我有一个由2台服务器组成的web服务器场 我已在这两台机器上的machine.config中设置了机器密钥和验证密钥 加密:SHA1,解密:AES-这些是默认值,它能帮助更改它们吗 我已经验证了链中没有其他配置文件(web.cfg、apphost等)具有这些值的设置 我在站点()中添加了一个

我想我已经试过了这个问题的所有标准答案,我知道我已经阅读了数百个关于这个问题的问题和帖子,但是没有一个似乎已经解决了这个问题,也没有一个能够解释我的场景中的原因。(我只剩5个小时了,没有更近的距离:-()

  • 我有一个由2台服务器组成的web服务器场

  • 我已在这两台机器上的machine.config中设置了机器密钥和验证密钥

  • 加密:SHA1,解密:AES-这些是默认值,它能帮助更改它们吗

  • 我已经验证了链中没有其他配置文件(web.cfg、apphost等)具有这些值的设置

  • 我在站点()中添加了一个页面,该页面将机器键值吐出,并验证了对两台机器的请求中的键值是否相同,以及是否与machine.config中的值匹配

  • 服务器端会话状态为共享状态服务器,我已验证sessionid在两台服务器的请求之间保持不变

  • 我已验证页面已完全加载,并且在启动帖子之前已将uu EVENTVALIDATION隐藏字段呈现到页面中。viewstate大小为7.64kb,还不错

当一个页面从一个请求呈现到服务器1,然后又发回服务器2时,我得到了可怕的…

Error Message:

Unable to validate data.
at System.Web.Configuration.MachineKeySection.GetDecodedData(Byte[] buf, Byte[] modifier,   Int32 start, Int32 length, Int32& dataLength)
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)   HttpApplication.RecordError => HttpApplication.RaiseOnError => global_asax.Application_Error
这篇文章是由一个标准的、纯asp链接按钮触发的,页面上没有ajax

我们将非常感谢您的任何帮助


设置enableViewStateMAC=false不是一个解决方案:-)

如果您已经确定两个框上的机器密钥相同,可能是加密/解密吗

您是否尝试过在两台服务器上使用Triple DES并在machine.config中设置decryptionKey


确保机器键相同的另一个简单方法是在web.config中添加这样一行

注意:假设两台服务器上的web.config相同,并确保validationKey和decryptionKey有效

您可以使用来生成它

<system.web>
  <machineKey validationKey="*D9B0EDEA69D81A89BF5FBA2B08BAF691013F86B89A1F6BA8068C6ECC9539074" decryptionKey="*AE2B1966AF65D08F03EDFB" validation="SHA1" decryption="AES" />

继承了服务器的配置状态,我从未质疑过密钥的有效性。。。刚刚检查了两台服务器上的匹配情况

保持所有加密/解密和验证算法设置不变,我使用生成了新密钥,该密钥比其他密钥有更多的选项

问题解决

故事的寓意:如果有疑问,生成新的密钥

。。。但是为什么以及如何?一些带有viewstate的回发在使用旧密钥时工作正常,只有当回发到另一台服务器时,问题才变得明显。如果密钥无效-缺少字符或其他东西-那么每次回发都应该失败-我认为