负载均衡器后面的.NET应用程序生成不同的会话ID?

时间:2012-03-19 15:37:09

标签: asp.net session session-state load-balancing

我们有一组.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?

1 个答案:

答案 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。