2014-09-04 70 views
1

我是小失物......失去从会议间歇

我们使用SQLSERVER会话共享和我们的生产(2台服务器)和分期(2台服务器),我只是从会议间歇性地失去一个项目。分段和生产都是负载平衡的,并且在相同的服务器上,但指向不同的数据库。

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

Sql服务器会话表和sprocs特定于环境,因为它们是在dev,staging或生产数据库中设置的。

代码放置在会议

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

你有没有在web.config中定义的机器密钥? – Fredou 2014-09-04 17:27:27

+0

2014-09-04 17:36:14

+0

我已经回收应用程序池并重新启动暂存站点。这没有帮助。 – 2014-09-04 17:49:57

回答

0

我们的临时网站是负载均衡......我们禁用节点2只发节点1活性。它没有任何问题。

最初,我们没有在分段或生产站点上启用持久性。我们在暂存网站上启用了基于cookie的持久性,并且在我们验证了持久性cookie在浏览器中通过时,我的网页仍然没有像预期的那样持续工作。我们将负载均衡器切换为使用基于客户端IP的持久性,然后确实看起来正在进行分级。将在生产中实施。