IIS6:当应用程序池被回收时,是否调用会话结束?

IIS6:当应用程序池被回收时,是否调用会话结束?,iis,iis-6,Iis,Iis 6,我需要知道,因为我必须明确关闭一些与用户会话相关的远程资源。我一定不同意Darin的观点。我在Session_End中调用一个函数来记录会话的结束。我没有明确测试过这个,但我在日志中查看了应用程序池回收的最后几次。调用了该函数并记录了活动会话的结束 当应用程序池按计划回收时,以及由于我部署了一些新的DLL而回收时,都会发生这种情况。如果我正确回忆(从我阅读文档起已经有一段时间了),具有活动会话将延迟正常的应用程序池回收计时器(在释放资源时触发)因为服务器存储在活动会话上,这意味着需要继续。一旦会

我需要知道,因为我必须明确关闭一些与用户会话相关的远程资源。

我一定不同意Darin的观点。我在Session_End中调用一个函数来记录会话的结束。我没有明确测试过这个,但我在日志中查看了应用程序池回收的最后几次。调用了该函数并记录了活动会话的结束

当应用程序池按计划回收时,以及由于我部署了一些新的DLL而回收时,都会发生这种情况。

如果我正确回忆(从我阅读文档起已经有一段时间了),具有活动会话将延迟正常的应用程序池回收计时器(在释放资源时触发)因为服务器存储在活动会话上,这意味着需要继续。一旦会话过期(并触发会话结束事件),应用程序回收计时器将重新启动并倒计时,最终在线程池释放其自身资源并终止应用程序之前触发

这是在正常情况下,应该注意的是,会话结束事件不一定会触发(过去有非常特定的场景不会触发),我认为现在这主要与IIS崩溃实例或应用程序池回收OOM或错误有关。以前是这样的,除非您只使用其中一种会话类型(我相信状态服务器),否则它不会可靠地触发。现在可能不同了

如果您需要保证释放资源,我不确定session_end是否适合这样做。能否将其提升到应用缓存或HTTP缓存,并在定期清理事件中使用会话唯一键?这可能更可靠(更多代码),但更可靠


根据我的经验,session_end的启动相当可靠,但我看到它在大量负载(每秒100次点击)下失败,我知道当你开始谈论服务器场时,它也会变得非常复杂

还要注意,只有在使用Inproc会话模式时才会调用Session_End。对于其他模式(包括SQL会话状态模式),不会引发此事件。

同意,刚刚测试并触发:-)我只说最多20-30个用户,但保持连接打开的成本非常高,我不相信远程服务器会关闭它。