【发布时间】:2014-09-04 17:18:45
【问题描述】:
我有点迷路了……
我们正在使用 sqlserver 会话共享,并且在我们的生产(2 台服务器)和暂存(2 台服务器)上,我只是间歇性地从会话中丢失一项。登台和生产都是负载平衡的,并且在相同的服务器上,但指向不同的数据库。
我的本地开发和开发站点(不同的服务器)没有这个问题。这些都使用 dev 数据库。
Sql 服务器会话表和存储过程是特定于环境的,因为它们是在开发、登台或生产数据库中设置的。
在会话中放置项目的代码
SessionService.AddItem(SessionKeys.LoggedInUser, user); //this is always available
SessionService.AddItem(SessionKeys.Impersonator, inhouseUser); //this is lost intermittently
public static void AddItem(string key, object value)
{
CheckSessionAvailability();
HttpContext.Current.Session[key] = value;
}
从会话中获取项目:
User inhouseUser = SessionService.GetItem<User>(SessionKeys.Impersonator);
public static T GetItem<T>(string key)
{
object item = null;
CheckSessionAvailability();
item = HttpContext.Current.Session[key];
if ((item != null) && !(item is T))
{
throw new ApplicationException("Cannot convert");
}
return (T)item;
}
【问题讨论】:
-
你有在 web.config 中定义的机器密钥吗?
-
是
-
我已回收应用程序池并重新启动暂存站点。这没有帮助。
-
我已经通过 ip 测试了暂存节点(2 个实例),并且两个会话项都可用。
-
我已经更改了密钥,而不是放置完整的用户对象,现在我只为第二个项目放置用户 ID。它仍然在做同样的事情。
标签: c# asp.net asp.net-mvc session