间歇性地从会话中丢失项目

时间:2014-09-04 17:18:46

标签: c# asp.net asp.net-mvc session

我很少迷路......

我们正在使用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;
        }

1 个答案:

答案 0 :(得分:0)

我们的暂存站点是负载平衡的...我们禁用了节点2并且只使节点1处于活动状态。它没有任何问题。

最初,我们在暂存或生产站点上没有启用持久性。我们在登台网站上启用了基于cookie的持久性,虽然我们在浏览器中验证了持久性cookie,但我的页面仍未按预期一致地工作。我们将负载均衡器切换为使用基于客户端IP的持久性,然后它确实似乎正在进行分段。将在生产中实施相同的。