我在ASP .Net上阅读了两篇关于会话状态模式的MSDN文章。 1和2。
两篇文章都显示“进行中”会话状态模式是唯一支持Session_OnEnd事件的模式。如果会话状态Mode是StateServer或SQLServer,则忽略Global.asax文件中的Session_OnEnd事件。如果会话状态Mode设置为Custom,则Session_OnEnd事件的支持由自定义会话状态存储提供程序确定。
任何人都可以告诉我为什么它会忽略StateServer或SQLServer模式的Session_OnEnd事件?
答案 0 :(得分:1)
StateServer和SQL Server模式正在一个配置中运行,它们可以在负载平衡场景中为N个客户端提供服务,并且必须维护此列表并在进程/机器之间发送消息以通知Session_OnEnd。 InProcess知道Session在与应用程序相同的进程中进行管理,因此将回调发送到单个侦听器是.NET Framework的直接和固有的。如果您不喜欢这样,您可以编写自己的处理程序,但要注意cavaets。
答案 1 :(得分:1)
我认为表现是主要问题。除了InProc模式之外,还有几个响应请求的Web服务器和一个处理状态的服务器(可能是集群SQL)。
现在,谁负责处理超时?它必须是状态服务器,但我们希望尽可能少地加载该服务器。并且它需要状态服务器将数据推送到(随机)网络服务器,以用于轮询所有其他内容。我怀疑目前状态服务器甚至保留了Web服务器列表,他们不需要。因此,仅针对SeesionEnd事件,有必要添加一个复杂的系统来管理WebServers的监控。
再加上跟踪所选服务器是否确实完成了事件的复杂性,这一切都变得非常缺乏吸引力。