2013-04-08 18 views
3

我认为我已经尝试了所有针对此问题的标准回答,并且我知道我已经阅读了数百个关于此问题的问题和帖子,但没有他们似乎已经解决了这个问题,或者说明了我的情况下的原因。 (我5小时下来,没有接近:-()视图状态验证在网络农场中失败 - 常见嫌疑人被淘汰

  • 我有2个服务器网络农场。

  • 我已经设置machine.config中机键和确认键两台机器

  • 加密:SHA1,解密:AES - 这是默认设置,它可以帮助改变他们

  • 我已经验证,在链中没有任何其他配置文件(web.cfg,APPHOST等)有一个这些值的设置。

  • 我添加了一个页面到吐机器键值背出现场(based on this SO),并证实它们是相同的跨越请求机器和匹配是机器的.config

  • 服务器端会话状态位于共享状态服务器中,我已验证sessionid对2个服务器的请求之间保持不变。

  • 我已验证页面已完全加载,__EVENTVALIDATION隐藏字段在启动帖子之前已呈现到页面中。该视图状态的大小是不是太糟糕,在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 =虚假不:-)

回答

2

继承了配置状态下的服务器,我从来没有质疑密钥的有效性! ...只是检查,他们在两台服务器上匹配...

他们离开所有的加密/解密和验证算法设置,我用this tool具有比其他人更多的选项生成新的密钥。

问题解决

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

...但为什么和怎么样?一些带有视图状态的回发功能在旧密钥的使用情况良好,只有当回传到不同的服务器时,问题才会明显。如果钥匙无效 - 丢失一个字符或东西 - 然后回发应该失败 - 我认为

1

一个解决方案,如果你建立了机器键是在两个箱子一样,难道是加密/解密它们?

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

Check here

1

而且确保MachineKeys的是相同的一个简单的方法是在web.config中添加这样一行。

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

您可以使用http://aspnetresources.com/tools/machineKey生成它。

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