2009-09-18 50 views
1

我在ASP .Net的会话状态模式下阅读了两篇MSDN文章。 12在进程会话状态模式是唯一支持Session_OnEnd事件的模式

这两篇文章都显示“In Process”会话状态模式是唯一支持Session_OnEnd事件的模式。如果会话状态Mode是StateServer或SQLServer,则忽略Global.asax文件中的Session_OnEnd事件。如果会话状态模式设置为自定义,则对Session_OnEnd事件的支持由自定义会话状态存储提供程序确定。

任何人都可以请给我任何理由为什么它会忽略StateServer或SQLServer模式的Session_OnEnd事件?

回答

1

我认为性能是主要问题。在除InProc模式外的所有模式中,有几个Web服务器响应请求,并且有一个服务器(可能是集群SQL)处理状态。

现在,谁来负责处理超时?它必须是州服务器,但我们希望尽可能少的负担该服务器。而且它需要状态服务器将数据推送到(随机)网络服务器,其他所有服务器都将被轮询。我怀疑目前状态服务器甚至保留了Web服务器列表,他们不需要。所以,仅仅为了SeesionEnd事件,就有必要添加一个复杂的管理系统来监控WebServers。
除此之外,追踪所选服务器是否确实完成了事件并且这一切都变得非常没有吸引力。

+0

因此,从您的答案和Nissan Fan的回答中可以明显看出.Net Framework由于涉及的性能和复杂性而未实现。 – Nirlep 2009-09-22 18:07:30

1

StateServer和SQL Server模式正在一个配置中运行,它们可以在负载均衡场景中为N个客户端提供服务,并且必须维护此列表并通过进程/机器发送消息来发信号通知Session_OnEnd。 InProcess知道Session是在与应用程序相同的进程内进行管理的,因此将回调发送给单个侦听器对于.NET Framework来说是直接的和固有的。如果你不喜欢这个,你可以编写你自己的处理程序,但要注意cavaets。