2010-01-26 72 views
2

昨天在我们的某个网站上发现了此问题。首先,该网站托管在Web场环境中,暂时我在两个节点(2节点环境)上为web.config添加了一个静态machineKey。这已经解决了这个问题,现在一切运行良好。视图状态MAC验证失败

这引发了以下问题: 为什么我们在此环境中运行的所有其他网站都不需要此(web.config中的machineKey)。

我检查了事件日志以确保我们在其他网站上没有相同的问题,一切都很正常。我还确认应用程序池不会经常回收,关于应用程序池设置,一切都是正常的。

我能想出的唯一解释是,该网站是由一个节点渲染的,后续的后台转到另一个节点 - 这会让我相信问题在于负载平衡器。我们的基础架构人员告诉我,关于负载平衡器和我提议的场景不会发生的情况,应该是这样。

我是否错过了这里的显而易见的东西,或者有什么我可以考虑的吗?

在此先感谢

回答

1

基本上,是的,你是对的 - 当“粘滞会话”在负载平衡器中没有正确配置并且用户回发被发送到不同服务器时,您通常会在Web场环境中看到此情况。

为了公平对待您的网络人员,可能大部分请求都被发送到一台服务器,但是这个应用程序正在降低使用率,因此请求通常会发送到另一台服务器 - 但您应该会看到网站,除非交通模式完全不同。

另一个可能的原因是您的页面加载时间过长,并且用户在页面完全加载完成之前回复 - 我设法让我的一个网站用几个在页面加载过程中隐藏远程广告调用,或者用户在页面呈现和回发之间等待时间过长,并且负载平衡器上的会话超时,因此它认为这是一个新请求。

+1

+1对于粘滞会话的想法 - 我有网络人员检查如何配置这个特定的网站会话持久性。我非常怀疑,页面加载速度太慢或没有完全加载之前回发生 - 它是一个页面“感兴趣的注册”类型的网站与几个文本框字段和没有沉重的图形(使用CSS精灵来减少HTTP请求和总图像大小) – 2010-01-27 00:10:13

+0

负载平衡器上的会话持久性或“粘滞会话”设置为0秒,因此请求会根据流量负载在服务器之间弹出。解释为什么我们的其他网站没有在web.config中定义的静态machineKey运行良好,因为它们坚持单个节点 - 感谢您的建议。 – 2010-01-27 00:33:26

+0

没问题,我自己也犯过类似的错误;) – 2010-01-27 00:57:08

0

如果你是一个网络农场的环境中工作,机器键值,如果在web.config中指定需要同步。另外,您还需要确保machine.config文件中的机器键值在两者之间同步。

+0

@Mitchel我理解背后的逻辑,但我没有得到的是为什么其他网站似乎没有在web.config中指定的机器密钥值,并且如果machine.config在节点之间同步,是其他网站工作的原因,为什么我们的网站需要在web.config中指定它。 – 2010-01-26 22:42:10