Session_Start()如何在服务器场中运行?

时间:2009-02-24 21:16:15

标签: asp.net session web-farm load-balancing

OnSessionStart / Session_Start事件是否仍然只在服务器场环境中触发一次(总计),或者由于请求由多个服务器处理,每个服务器可以激活一次吗?

ASP.NET / IIS6或7

应该假设服务器正在使用Sticky Sessions。

4 个答案:

答案 0 :(得分:5)

使用IIS的默认安装时,答案为“否” - Session_Start通常会多次触发。客户端将在其命中的每个不同服务器上创建新的会话。如果您在IIS中使用Web Garden选项,则会发生同样的情况。

如果您不依赖于Session并且您拥有服务器场,则通常最好完全禁用会话状态。这是你如何做到的: http://support.microsoft.com/kb/306996

如果依赖Session,最好的选择可能就是ASP.NET State Server Service。服务器场中的所有服务器都将使用单个服务器进行会话状态,这将确保Session_Start仅触发一次。有关设置的大量背景和详细信息,请阅读此内容(查找“状态服务器模式”以获取具体说明): http://aspdotnetdevs.blogspot.com/2008/12/aspnet-session-state-and-modes.html

答案 1 :(得分:4)

除托马斯外:这取决于您的会话状态设置。

在web.config中,<sessionState mode="" >

如果您使用mode="InProc",您将获得多个Session和SessionStart事件,每个访问过的服务器1个。

在其他模式(StateServer或SqlServer)中,您将获得1个会话和1个SessionStart。您将完全获得SessionEnd事件。

答案 2 :(得分:1)

在服务器场中,您将使用Sql Server或State Server来管理服务器场中所有服务器的会话状态。正是这个单一服务器负责管理你的状态,而不是确保每个会话只调用OnSessionStart一次,并且不需要总是让所有请求都返回到同一个服务器。

使用单个服务器维护会话状态的主要缺点是您不再拥有OnSessionEnd事件。

答案 3 :(得分:0)

我的理解是,一旦请求到达服务器场中的服务器,同一客户端的所有即将发出的请求都应重定向到服务器场中的同一服务器。