使用ASP.NET/SQL Server丢失会话状态

Mat*_*ott 19 asp.net asp.net-mvc sql-session-state machinekey

我有一个ASP.NET MVC工作流配置为由负载均衡器管理的两个网站.这些网站使用Sql Server作为会话状态提供程序,并关闭身份验证(不需要).

现在,偶尔我似乎失去了会话状态,我相信这是因为请求由备用服务器处理,所以基本上用户从服务器跳到服务器,这取决于负载均衡器看起来如何适合.我并不总是在工作流的同一阶段"丢失会话状态",所以我认为它与Web场配置+ sql server会话状态有关.

两个应用程序使用相同的机器密钥来加密和解密存储在sql server中的会话状态.

两台服务器上的配置如下:

<authentication mode="None" />
<sessionState mode="SQLServer" sqlConnectionString="{connection-string}" />
<machineKey decryptionKey="777CB456774AF02F7F1AC8570FAF31545B156354D9E2DAAD" 
            validationKey="89B5B536D5D17B8FE6A53CBB3CA8B8695289BA3DF0B1370BC47D362D375CF91525DDB5307D8A288230DCD4B3931D23AED4E223955C45CFF2AF66BCC422EC7ECD" />
Run Code Online (Sandbox Code Playgroud)

我已经确认两台服务器上都是一样的,有什么我遗漏的吗?

当我使用单个服务器时,在我的开发环境中不会发生这种情况.

我担心我会受到星期五蓝调的影响,毫无疑问下周会找到答案,遗憾的是我不想等!

有任何想法吗?

Mat*_*ott 28

发现了这个问题.

当您创建希望使用Sql Server共享会话状态的应用程序时,它们需要在IIS中配置相同的ID.这是因为生成的会话ID是基于应用程序ID生成的.(内部应用程序ID类似于LM/W3SVC/1

这两台服务器对IIS中的每个应用程序都有不同的ID.解决方案是更改每台服务器上"管理网站 - >高级设置"下的ID.

在此输入图像描述


Kri*_*use 8

  1. 使用IIS管理器,在根级别和网站级别上仔细检查您的计算机密钥设置.

在此输入图像描述

  1. 查看计算机密钥元素上的IsolateApps修饰符 - http://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.100%29.aspx

  2. 你最近从3.5升级到4.0了吗?

  3. 最后一种方法 - 在两台机器上回收appPools,然后重新启动IIS.


EdS*_*dSF 6

会话具有(Web)应用程序范围.看看这个MS KB是否有帮助.

更新:有趣的投票.也许我的建议需要更清晰.

另外选配机键,你必须匹配网站IIS配置(所以它的"同一个应用程序"(应用程序路径)在IIS.