4

关于如何使用IRegisteredObject检测应用程序何时关闭存在一些问题。但是,在所有活动请求完成之前,不会调用 IRegisteredObject.Stop。

长时间运行的请求(推送、长轮询、Web 套接字)就是这种情况,这意味着这些请求可以无限期地阻止应用程序池回收。

有没有办法从长时间运行的请求中检测到应用程序关闭处于挂起状态?

我已经使用 IRegisteredObject 或轮询 HostingEnvironment.ShutdownReason 进行了测试。在完成主动请求之前,两者都无法工作。

4

1 回答 1

4

Katana/Owin 项目访问内部 System.Web.Hosting.UnsafeIISMethods.MgdHasConfigChanged 方法来检测关闭,以便长时间运行的请求可以检测到这种状态。

有关示例实现,请参阅ShutdownDetectorUnsafeIISMethods

于 2013-02-27T17:22:36.063 回答