防止 IIS 运行后台任务时出现闲置超时

7
在我们的ASP.Net Core Web API中,我们使用“托管服务”来执行一些后台任务。有时候这些后台任务可能需要很长时间才能完成(大约一个小时)。除了在存在长时间运行的任务时会出现问题外,其他情况下都可以正常工作。
IIS应用程序池的空闲超时默认值为20分钟。因此,当20分钟内没有请求时,IIS将重新启动应用程序池。但有时候,即使在后台任务正在运行时,IIS也会重启,导致任务突然终止而未标记为完成。一旦IIS启动,托管服务就会立即再次提取任务并开始处理。但在完成之前,IIS就会重启,如此反复不断。在发送电子邮件任务时,这可能会导致许多问题,同一封电子邮件可能会被多次发送。
由于托管服务是ASP.NET Core的一级公民,如果IIS在执行空闲超时时也考虑后台执行,那就太理想了。
目前,我们通过将空闲超时设置为0来解决此问题,以便它永远不会超时。这是一种巧妙的解决方法。但是,在负载平衡环境中,其中节点是动态添加和删除的,这不是可行的选择。
有更好的方法“防止IIS在后台执行时重新启动”吗?
谢谢。

请查看此问题 - Muhammad Hannan
你可以尝试一些设置,比如禁用空闲超时(设置为0),禁用定期时间间隔,将CPU间隔限制设置为0。参考此图片:image - Jalpa Panchal
谢谢。那是我现在所做的。但那不是一个适当的解决方案。 - Wijitha
这是运行设置IIS应用程序池始终运行的IIS设置。 - Jalpa Panchal
在运行托管在IIS Express(本地环境)的Hangfire服务器时,我遇到了这个问题。 - Alexander
2个回答

12
考虑使用专为此类任务设计的Hangfire。目前,您可以配置IIS始终运行该站点。
  1. 右键单击站点名称>管理网站>高级设置>确保预加载设置为true。

  2. 右键单击应用程序池>高级设置>空闲超时(分钟)设置为0,启动模式设置为始终运行。


如何在IIS Express中实现这个? - Alexander
1
@Alexander 通常情况下,这个问题并没有太多意义,因为 IIS Express 的运行方式通常是这样的 - 也就是说,IIS Express 的生命周期与一个单独的应用站点绑定 - IIS Express 非常针对单个用户/开发者和调试工作流程进行了优化。 - undefined

2
我不知道你的设置情况,但也许你省略了IIS,使用类似Kestrel的东西。
此外,我不会把发送电子邮件这样的长时间运行任务放在IIS进程中运行。相反,将它们放在另一个进程中,例如控制台应用程序,并让apsnetcore应用程序为用户提供请求服务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接