我有一个2节点的Web场进行testing(复制我的生产环境)。 现在,在其中一个节点(其中一个节点兼作构build服务器)上安装VS2010之后,看起来好像机器密钥被解密了。
如果我在每个节点上访问我的应用程序都可以正常工作(从本地主机,并将另一个节点从服务器场中取出),但是当我在数组中有两个节点时,出现http错误(500,404和401)页面资源(我怀疑那些被路由到服务器,没有创build身份validationcookie),我也得到一堆“解密数据的长度是无效的”例外。 这些导致我相信由服务器生成的身份validationcookie与其他服务器不兼容,因此两个节点上的机器键是不同的,但我不知道哪里!
一些更多信息:
machineKeys在我的应用程序web.config中指定,两者都相同,都有SHA1algorithm
这两个应用程序都运行.net 2.0框架(asp.net 3.5应用程序)在池中具有相同的configuration。
两台服务器都运行w2k3服务器,安装了所有更新,除了其中一台服务器安装了.net4.0和VS2010,另一台服务器没有安装。
没有一个服务器在全局的machine.config中指定了一个机器密钥,所以他们应该使用web.config,对不对?
任何想法下一步看什么?
回答
我终于弄明白了。 事实certificate,其中一个节点没有通过Windows Update正确安装关键更新(KB2416470)。 正如Scott Gu的post中提到的那样
重要的是,如果您的站点或应用程序正在Web场中的多个Web服务器上运行,则需要确保将更新应用于所有机器(而不仅仅是其中的一部分)。 这是因为更新更改了ASP.NET中某些function的encryption/签名行为,而修补和未修补的服务器组合会导致encryption/签名行为在它们之间不兼容。
手动安装更新解决了这个问题。
希望这能节省一些别人的时间。