我很少迷路......
我们正在使用sqlserver会话共享和我们的生产(2台服务器)和登台(2台服务器),我只是间歇地从会话中丢失一个项目。分段和生产都是负载平衡的,并且在相同的服务器上,但指向不同的数据库。
我的本地开发和开发站点(不同的服务器)没有此问题。这些都使用dev数据库。
Sql server会话表和sprocs特定于环境,因为它们是在dev,staging或production数据库中设置的。
将项目放入会话的代码
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;
}
答案 0 :(得分:0)
我们的暂存站点是负载平衡的...我们禁用了节点2并且只使节点1处于活动状态。它没有任何问题。
最初,我们在暂存或生产站点上没有启用持久性。我们在登台网站上启用了基于cookie的持久性,虽然我们在浏览器中验证了持久性cookie,但我的页面仍未按预期一致地工作。我们将负载均衡器切换为使用基于客户端IP的持久性,然后它确实似乎正在进行分段。将在生产中实施相同的。