我们遇到ASP.NET用户会话performanceexception的问题 – 会话数据出现,消失和重新出现。
我想我知道问题是什么:
因此,当用户login到站点并四处移动时,每个HTTP调用可以转到任一Web服务器,因此根据服务器使用具有不同ID的会话状态logging。 实际上,用户将同时拥有2个独立的会话实例。 我相信我已经validation了这一点,在数据库ASPStateTempSessions表中,每个会话Cookie ID似乎对应于2个几乎相同的命名logging(它们的ID仅相差最后几个字符,我相信它们是基于来自AspStateTempApplications表)创build在几秒钟内。
因此,会话状态将显得不当行为,因为对一个会话logging所做的更改只会对该Web服务器持续存在。 如果用户移动到其他负载平衡服务器,会话值似乎消失或恢复。
我相信解决scheme是同步网站的IIS实例ID(例如,使他们都/ W3SVC / 1 /根 ),但我试图编辑在高级设置下IIS的值,虽然它保存好,它只是使网站在该服务器上返回404s,直到我将其更改回来。
我发现这个问题的VBS脚本 ,但它似乎只用于IIS 6,所以我很担心尝试它。 有其他人在IIS 7.5上遇到这种情况,你是如何解决这个问题的?
编辑/解决scheme
我的错误是,我忘记在IIS中更改站点实例ID后重新启动IIS。 在此之后,ID被更新,ASP.NET会话在两个Web服务器上同步。
完整的说明:
c:\windows\system32\iisreset /restart
) 为LIVE2做同样的事情(确保Site ID和LIVE1一样)
请注意,站点ID确实会影响站点文件的位置,例如,日志文件文件夹将变为C:\inetpub\logs\LogFiles\W3SVC10
。
另请注意,您可以通过编辑每个服务器上的IISconfiguration文件中的站点ID属性来手动执行这些更改: C:\Windows\System32\inetsrv\config\applicationHost.config
。 需要pipe理员权限,然后仍然需要重置。
从你的问题来看,你似乎有一个中央会话状态服务器(DB?),跟踪会话数据?
您还必须同步用于任何表单身份validation等encryption工作的机器密钥。 这可能也会影响会话识别,我不确定。
http://technet.microsoft.com/en-us/library/cc755177%28WS.10%29.aspx
此外,你应该使用机器上的共享configuration,它可能会用不同的机器键来解决问题。
Web服务器场的IISconfiguration同步?
编辑:当你改变了站点ID,你尝试重新启动IISpipe理器,看看是否webroot已经改变? 也许configuration连接到ID,这意味着ID的变化也会修改像文档根等东西