【发布时间】:2021-07-05 18:00:29
【问题描述】:
我有一个在 IIS 中运行的 ASP.NET (.NET Framework) 站点。该站点有一个长时间运行的后台进程,当应用程序池作为拆除活动 VM 的一部分而停止时,我希望 w3wp 进程继续运行,直到后台进程正常关闭(这可能需要很长时间) .
我们利用自定义 IRegisteredObject 插入 ASP.NET 关闭;在后台进程关闭之前,我们的代码不会从 Stop(true) 调用返回。
当我们停止应用程序池时,我们在日志中看到 Stop(false) 被调用,然后 Stop(true) 像我们预期的那样在 30 秒后被调用。但是,在 Stop(true) 返回之前,IIS 只是在杀死工作进程。此终止发生在初始 Stop(false) 调用后五分钟。我们想延长这个超时时间。
在 IIS 本身中,我们有 App pool->Process Model->Shutdown Time Limit to 1000s。将此值降低到 5 分钟以下可以使杀戮更快发生,但将其提高到 5 分钟以上并不能阻止 5 分钟的杀戮。
是否有其他一些超时设置来控制此关闭?是否可以超过 5 分钟?
【问题讨论】:
-
Web 应用程序中长时间运行的进程不是一个好主意。您是否考虑过将该功能提取到 Azure 函数/AWS Lambda(在云中)或 Windows 服务(本地)?
-
@mason 在写这个问题时,我试图将情况简化为不熟悉特定上下文和应用程序的人容易理解的情况,但这并不完全是更复杂的情况我加入了。我知道还有其他方法可以运行长时间运行的进程,但我特别想更深入地了解应用程序池停止行为。