我使用.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
我将等待几天,以查看此设置的工作原理
但是,我不确定不回收应用程序池是否是个好主意?任何建议
答案 0 :(得分:0)
理想情况下,您应该遵循official docs。
在您的情况下,还应将“托管管道”模式设置为Integrated
,将“启动模式”设置为Always Running
,将“启用预加载”设置为true
,并在配置编辑器中进行一些编辑
所有这些都在官方文档(上面链接)中提到并进行了更详细的介绍。