3

我有一个应用程序一直存在会话丢失问题,我几乎可以肯定它与应用程序池回收太频繁有关。

我想尝试一个进程外解决方案并配置了 SQLServer sessionState,但是当我回收工作进程时,我的会话仍然被吹走。这是我的 web.config

<sessionState cookieless="false" stateConnectionString="tcpip=localhost:42424"  mode="SQLServer" sqlConnectionString="Data Source=(local;User ID=user;Password=password" timeout="180" />

我已经运行了适当的 sql 脚本来设置数据库,并且可以看到会话已创建并存储在数据库中,但是如果我更改 web.config 或手动回收工作进程,我的会话将丢失。我究竟做错了什么??

旁注,我收到与 StateServer 模式完全相同的行为。我似乎正确配置它,我可以看到登录时状态服务内存占用变大....我尝试将非序列化对象推送到并收到错误....但是当我回收应用程序池或更改web.config 我失去了会话....

我还尝试设置可以在这里找到的 Memcached 会话提供程序(这是我真正想使用的):http: //memcachedproviders.codeplex.com/releases/view/10468

它也在做同样的事情!我可以看到正在数据库中创建会话,当我尝试与非序列化对象交互时,我会收到与序列化有关的错误......但是当应用程序池被回收时我会丢失会话。
启用一些日志记录后,我在事件查看器中看到: 事件代码:1003 事件消息:应用程序编译正在启动

没有人??我真的需要摆脱进程会话状态的工作......帮助!

4

1 回答 1

0

检查机器密钥的设置(假设 IIS 7.5)。如果您的 Web 服务器设置为自动生成机器密钥,则它可能会在您的应用程序回收时生成一个新密钥,这会导致您丢失会话。

请在此处查看此链接,以轻松为您的 Web 应用程序生成唯一的机器密钥。您应该能够在 Web 服务器或 Web 应用程序级别生成它们。

http://blogs.msdn.com/b/amb/archive/2012/07/31/easyest-way-to-generate-machinekey.aspx

此外,FWIW,SQL Server 会话状态管理器与数据库非常健谈。它可以工作,但是您将使用该 Session 提供程序为每个请求访问数据库。

于 2012-10-03T14:12:07.857 回答