Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 间歇性地从会话中丢失项目_C#_Asp.net_Asp.net Mvc_Session - Fatal编程技术网

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

C# 间歇性地从会话中丢失项目,c#,asp.net,asp.net-mvc,session,C#,Asp.net,Asp.net Mvc,Session,我有点迷路了 我们正在使用sqlserver会话共享,在我们的生产(2台服务器)和暂存(2台服务器)上,我只是间歇性地从会话中丢失一项。暂存和生产都是负载平衡的,它们位于相同的服务器上,但指向不同的数据库 我的本地开发和开发站点(不同的服务器)没有此问题。它们都使用dev数据库 Sql server会话表和存储过程是特定于环境的,因为它们是在开发、暂存或生产数据库中设置的 在会话中放置项目的代码 SessionService.AddItem(SessionKeys.LoggedInUser, u

我有点迷路了

我们正在使用sqlserver会话共享,在我们的生产(2台服务器)和暂存(2台服务器)上,我只是间歇性地从会话中丢失一项。暂存和生产都是负载平衡的,它们位于相同的服务器上,但指向不同的数据库

我的本地开发和开发站点(不同的服务器)没有此问题。它们都使用dev数据库

Sql server会话表和存储过程是特定于环境的,因为它们是在开发、暂存或生产数据库中设置的

在会话中放置项目的代码

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;
        }
User-inhouseUser=SessionService.GetItem(SessionKeys.Impersonator);
公共静态T GetItem(字符串键)
{
对象项=null;
检查会话可用性();
item=HttpContext.Current.Session[key];
如果((项!=null)&&&!(项为T))
{
抛出新的ApplicationException(“无法转换”);
}
退货(T)项;
}

我们的暂存站点是负载平衡的。。。我们禁用了节点2,只激活了节点1。它没有任何问题


最初,我们在登台或生产站点上没有启用持久性。我们在登台站点上启用了基于cookie的持久性,虽然我们验证了浏览器中的持久性cookie,但我的页面仍然没有像预期的那样持续工作。我们将负载平衡器改为使用基于客户机IP的持久性,然后它似乎正在进行登台。将在生产中执行相同的操作

您是否在web.config中定义了计算机密钥?是的,我已回收了应用程序池并重新启动了临时站点。这没有帮助。我已经通过ip测试了暂存节点(2个实例),并且两个会话项都可用。我已经更改了密钥,而不是放置完整的用户对象,现在只放置第二个项的userid。这是stll做同样的事情。