应用程序池回收后,Hangfire周期性工作停止

时间:2019-07-12 16:14:47

标签: asp.net-core asp.net-core-webapi asp.net-core-2.1 hangfire hangfire-sql

我使用.NET Core附带的Windows Hosting模块,在IIS下运行ASP.NET Core API(v 2.2)。我已经在startup.cs中配置了Hangfire和几个重复的工作。

API的应用程序池由于不活动而定期回收。但是,无论何时(由于任何原因)回收应用程序池,循环作业都会停止运行,直到第一个用户调用api。

Hangfire documentation有解决方案,但特定于Full .NET,它可能不适用于.NET Core。

我发现的解决方案之一是在控制台应用程序中运行重复性工作,但是随后我不得不创建并维护一个新的应用程序。此外,除了重复执行的作业外,API内部还会创建后台作业以进行单向调用。例如

[HttpPost]
public IActionResult DoWork(int id)
{
    BackgroundJob.Enqueue<IWorkerService>(x => x.DoWork(id));
}

因此,如果我创建仅用于重复作业的控制台应用程序,则仍必须在API中为后台作业配置Hangfire。我试图避免在两个地方配置Hangfire。

在ASP.NET Core中,我有哪些选择可以使API始终运行?

更新1
根据讨论here,我对应用程序池设置进行了更改

Regular Time Interval设置为0

enter image description here

Idle Time-Out从默认的20更改为0 enter image description here

我将等待几天,以查看此设置的工作原理

但是,我不确定不回收应用程序池是否是个好主意?任何建议

1 个答案:

答案 0 :(得分:0)

理想情况下,您应该遵循official docs

在您的情况下,还应将“托管管道”模式设置为Integrated,将“启动模式”设置为Always Running,将“启用预加载”设置为true,并在配置编辑器中进行一些编辑

所有这些都在官方文档(上面链接)中提到并进行了更详细的介绍。