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