我将ASP.NET MVC工作流配置为由负载均衡器管理的两个网站。这些网站使用Sql Server作为会话状态提供程序,并关闭身份验证(不需要)。
现在,偶尔我似乎正在失去会话状态,我相信这是因为请求由备用服务器处理,所以用户基本上是从服务器跳到服务器,这取决于负载均衡器看起来如何适合。我并不总是"失去会话状态"在工作流程的同一阶段,所以我认为它与Web场配置+ sql server会话状态有关。
两个应用程序使用相同的机器密钥来加密和解密存储在sql server中的会话状态。
两台服务器上的配置如下:
<authentication mode="None" />
<sessionState mode="SQLServer" sqlConnectionString="{connection-string}" />
<machineKey decryptionKey="777CB456774AF02F7F1AC8570FAF31545B156354D9E2DAAD"
validationKey="89B5B536D5D17B8FE6A53CBB3CA8B8695289BA3DF0B1370BC47D362D375CF91525DDB5307D8A288230DCD4B3931D23AED4E223955C45CFF2AF66BCC422EC7ECD" />
我已经确认这两台服务器上的相同,是否有我遗漏的东西?
当我使用单个服务器时,在我的开发环境中不会发生这种情况。
我担心我会受到星期五蓝调的影响,毫无疑问会在下周找出答案,遗憾的是我不想等待!
有什么想法吗?
答案 0 :(得分:28)
发现了这个问题。
当您创建希望使用Sql Server共享会话状态的应用程序时,它们需要在IIS中配置相同的ID。这是因为生成的会话ID是基于应用程序ID生成的。 (内部应用程序ID类似于 LM / W3SVC / 1
两台服务器对IIS中的每个应用程序都有不同的ID。决议是更改“管理网站 - &gt;下的ID”。每台服务器上的“高级设置”。
答案 1 :(得分:8)
查看计算机密钥元素上的IsolateApps修饰符 - http://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.100%29.aspx
您最近是否从3.5升级到4.0?
最后的手段 - 在两台计算机上回收appPools,然后重新启动IIS。
答案 2 :(得分:6)
会话具有(网络)应用范围。看看this MS KB是否有帮助。
更新: 有趣的投票。也许我的建议需要更清晰。
在添加到匹配的计算机密钥时,还必须匹配网站的IIS配置(因此它是“相同的应用程序”(应用程序路径)< / em>在IIS中。