【问题标题】:Session.Abandon doesn't fire Session_End in Load Balancer EnvironmentSession.Abandon 不会在负载均衡器环境中触发 Session_End
【发布时间】:2013-05-08 03:21:09
【问题描述】:

我正在使用 Session.Abandon 来清除会话数据,这会在内部触发 session_end 以结束会话。它在我的本地机器上运行良好,但是当我在生产环境中测试它时它失败了(不会触发 session_end)。我们在生产环境中使用负载均衡器,所以我怀疑这可能是 session_End 事件没有触发的原因,尽管会话数据正在被清除。会话状态仅处于 InProc 模式。

编辑-

更正 - 我们有两个网站通过 IIS 在一台机器上托管,负载平衡器负责将请求导航到 IIS。两个网站共享相同的 cookie。我们正在尝试根据 cookie 值在第二个站点的 Session_Start 中设置一些值。当用户从第一个站点重定向到第二个站点时,它第一次工作正常,但第二次重定向我们得到会话 null。我很确定只有在第二次不调用 session_start 时才会发生这种情况,这基本上意味着当第一次重定向时,我们调用 session.abandon ,它不会触发 session_end ,此后所有后续请求 session_Start 都不会触发。

【问题讨论】:

  • 您将会话数据存储在每台机器的本地,但希望会话在负载平衡方案中正常工作?
  • @KirkWoll - 我没有收到您的评论,因为我是负载平衡的新手,但为了清楚起见,我们有一个托管在单个盒子中的网站,我们正在使用负载平衡器。我能够在登录页面中创建会话数据,并能够在不同页面中使用会话数据。唯一的问题是它不会以某种方式触发 Session_end。
  • 问题模棱两可,您正在使用负载均衡器和站点托管在一个盒子里????
  • @Punit,您的负载均衡器是否使用粘性会话?另外,如果您后面只有一个节点,为什么还要使用负载均衡器?
  • @eka -Ops 团队在一台机器上配置了负载均衡器,将请求路由到相关服务器。我们为 Web 和 Windows 服务提供不同的服务器。我可以找到有关如何配置的更多详细信息...

标签: c# asp.net session load-balancing


【解决方案1】:

当您的站点位于负载平衡器之后时,InProc 模式将不适用于站点,具体取决于会话。将会话带到 SQLServer 或 State Server 并提供机器配置值。请参考这些链接。

http://msdn.microsoft.com/library/ms178586.aspx http://blog.maartenballiauw.be/post/2007/11/22/ASPNET-load-balancing-and-ASPNET-state-server-(aspnet_state).aspx http://support.microsoft.com/kb/317604

【讨论】:

  • 负载均衡器中的 InProc 模式将在阅读差异文章后工作。我能够将值存储到会话中并在不同的页面中使用它。
  • 如果您使用的是粘性会话,那么 InProc 模式将起作用,否则在往返期间有可能连续请求到达不同的服务器。同样,这完全取决于您的 LB 配置为如何处理负载循环/活动请求/粘性等...
猜你喜欢
  • 2011-01-10
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
相关资源
最近更新 更多