我有一个用于测试的 2 节点 Web 场(复制我的生产环境)。现在,在其中一个节点(其中一个节点兼作构建服务器)上安装 VS2010 后,似乎机器密钥不同步了。
如果我在每个节点上访问我的应用程序,一切都会正常(从本地主机,并将另一个节点从农场中移除),但是当我将两个节点都放在数组中时,我会在几个页面资源上收到 http 错误(500、404 和 401)(我怀疑这些资源被路由到未创建身份验证 cookie 的服务器),并且还会收到一堆“要解密的数据长度无效”异常。这让我相信服务器生成的身份验证 cookie 与另一个服务器不兼容,因此两个节点上的 machineKeys 不同,但我不知道在哪里!
更多信息:
machineKeys 在我的应用程序 web.config 中指定,并且在两者上是相同的,并且都具有 SHA1 算法
两个应用程序均运行.net 2.0框架(asp.net 3.5应用程序),并且在池中具有相同的配置。
两台服务器都运行 w2k3 服务器并安装了所有更新,但其中一台服务器安装了 .net4.0 和 VS2010,而另一台没有。
没有任何服务器在全局 machine.config 中指定机器密钥,所以它们应该使用 web.config 密钥,对吗?
对于下一步该看哪里有什么想法吗?
答案1
回答
我终于搞明白了。原来,其中一个节点没有通过 Windows 更新正确安装关键更新 (KB2416470)。正如 Scott Gu 的帖子中提到的这里
重要的是 - 如果您的网站或应用程序在 Web 场中的多台 Web 服务器上运行,您需要确保更新已应用于所有计算机(而不仅仅是其中的一些)。这是因为更新会更改 ASP.NET 中某些功能的加密/签名行为,而修补和未修补的服务器混合使用会导致加密/签名行为在它们之间不兼容。
手动安装更新解决了该问题。
希望这可以为其他人节省一些时间。