.NET Core 部署IIS无法定时执行Hangfire任务

1,059 阅读1分钟

将netcore程式发布到iis上后,里面的定时任务未在设定时间正常运行,而是需要打开程式网址之后才会运行一次,但是发布到linux上可以正常定时执行。针对IIS发布无法正常运行的解决方案如下:

第一步:设置应用程序池

1、在应用程序池的基本设置中,将.NET CLR 版本 设置为 “v4.0.30319”,管理管道模式为 “集成”

一般情况下,netcore程式应该是选‘No managed’模式的,但是由于是hangfire定时任务,不选.NET CLR 版本的话应用程序预加载选项不起作用

image.png

2、在应用池的高级设置中,将启动模式设置为 “始终运行”,将空闲超时(分钟)设置为 0

image.png

第二步、设置应用程式的高级配置:Preload预加载

  1. Open Advanced Settings on your application
  2. Set Preload Enabled = True image.png

image.png

第三步、配置‘配置编辑器’

  1. 双击进入配置编辑器 image.png
  2. 在‘区段’栏位输入‘system.webServer/applicationInitialization’,回车。将doAppInitAfterRestart设为true image.png 3.点击‘集合’右侧的三个点'...' image.png 4.点击‘新增’,输入如下两个配置项
  • hostName:Hangfire 应用程序的 URL 主机
  • initializationPage:hangfire的仪表板路径,例如默认的 /hangfire image.png
  1. 点击‘套用’,保存配置

image.png

至此配置完成,hangfire定时任务可正常执行,此为hangfire官方文档步骤,网址:docs.hangfire.io/en/latest/d…

*还有一种简单的解决方案:不用做如上配置,先启动应用程式,然后再启动应用程式的程序池,也是可以让job正常定时执行