我们有一组.NET站点,它们托管在两个实际上相同的Web服务器上,一个简单的负载均衡器在两者之间拆分请求。一切都工作正常,直到我们在一台服务器上发生硬件故障并更换它。现在,我们遇到会话问题,因为只要负载均衡器切换到他们所连接的服务器,人们就会从应用程序中退出。
两台服务器上的应用程序都配置为使用SQLServer进行会话状态,并在web.config中具有相同的machineKey和sessionState值。 e.g:
<configuration>
<system.web>
<machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES" />
<sessionState mode="SQLServer" stateNetworkTimeout="30" stateConnectionString="..." allowCustomSqlDatabase="true" sqlConnectionString="..." cookieless="false" timeout="1441" />
</system.web>
</configuration>
据我所知,配对的应用程序也在IIS中设置相同:相同的URL,相同的应用程序池名称,甚至磁盘上的相同路径。
但是,对每个服务器上的同一站点的请求(通过IP)会创建两个唯一的SessionID值(在浏览器中使用相同的cookie名称)。
我是否应该设置/检查以在两台服务器上生成匹配的会话ID?
答案 0 :(得分:2)
最终在serverfault上找到了我的答案(为什么这些都是独立的网站和用户帐户?):https://serverfault.com/questions/288981/load-balanced-iis-7-5-web-server-asp-net-session-state-problem
简而言之:在IIS中每个站点的“高级设置”下,有一个可配置的数字ID,但显然是在该服务器上按站点创建的顺序自动增加1。这些ID在ASPStateTempApplications表中使用,并且在我们的服务器之间有所不同,从而产生不同的会话ID。