我有一个 ASP.NET MVC 工作流程,配置为由负载平衡器管理的两个网站。这些网站使用 Sql Server 作为 session 状态提供程序,并关闭身份验证(这不是必需的)。
现在,我似乎偶尔会丢失 session 状态,我相信这是因为请求正在由备用服务器处理,所以本质上用户正在从一个服务器跳转到另一个服务器,具体取决于负载均衡器认为如何合适。我并不总是在工作流程的同一阶段“丢失 session 状态”,所以我相信这与网络场配置+ sql server session 状态有关。
两个应用程序使用相同的计算 secret 钥来加密和解密存储在 SQL Server 中的 session 状态。
两台服务器上的配置如下:
<authentication mode="None" />
<sessionState mode="SQLServer" sqlConnectionString="{connection-string}" />
<machineKey decryptionKey="777CB456774AF02F7F1AC8570FAF31545B156354D9E2DAAD"
validationKey="89B5B536D5D17B8FE6A53CBB3CA8B8695289BA3DF0B1370BC47D362D375CF91525DDB5307D8A288230DCD4B3931D23AED4E223955C45CFF2AF66BCC422EC7ECD" />
我已经确认这在两台服务器上是相同的,是否有我遗漏的东西?
当我使用单个服务器时,在我的开发环境中不会发生这种情况。
我担心我正遭受周五忧郁症的困扰,毫无疑问下周就会找到答案,遗憾的是我不想等待!
有什么想法吗?
最佳答案
发现问题了。
当您创建希望使用 Sql Server 共享 session 状态的应用程序时,它们需要在 IIS 中配置相同的 ID。这是因为生成的 session ID是根据应用程序ID生成的。 (内部应用程序 ID 类似于 LM/W3SVC/1
对于 IIS 中的每个应用程序,两台服务器具有不同的 ID。解决方法是在每台服务器上的“管理网站 -> 高级设置”下更改 ID。
关于asp.net - 丢失 ASP.NET/SQL Server 的 session 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555000/