关于如何使用IRegisteredObject检测应用程序何时关闭,存在一些问题。但是,在所有活动请求完成之前,不会调用IRegisteredObject.Stop。
长期运行请求(小插件,长轮询,Web套接字)就是这种情况,这意味着这些请求可以无限期地阻止应用程序池回收。
有没有办法从长时间运行的请求中检测到应用程序已关闭?
我已经使用IRegisteredObject测试或轮询HostingEnvironment.ShutdownReason。在活动请求完成之前,两者都不起作用。
答案 0 :(得分:3)
Katana / Owin项目访问内部System.Web.Hosting.UnsafeIISMethods.MgdHasConfigChanged方法以检测关闭,以便长时间运行的请求可以检测到此状态。
请参阅ShutdownDectector和UnsafeIISMethods了解示例。