将netcore程式发布到iis上后,里面的定时任务未在设定时间正常运行,而是需要打开程式网址之后才会运行一次,但是发布到linux上可以正常定时执行。针对IIS发布无法正常运行的解决方案如下:
第一步:设置应用程序池
1、在应用程序池的基本设置中,将.NET CLR 版本 设置为 “v4.0.30319”,管理管道模式为 “集成”
一般情况下,netcore程式应该是选‘No managed’模式的,但是由于是hangfire定时任务,不选.NET CLR 版本的话应用程序预加载选项不起作用
2、在应用池的高级设置中,将启动模式设置为 “始终运行”,将空闲超时(分钟)设置为 0
第二步、设置应用程式的高级配置:Preload预加载
- Open Advanced Settings on your application
- Set Preload Enabled = True
第三步、配置‘配置编辑器’
- 双击进入配置编辑器
- 在‘区段’栏位输入‘system.webServer/applicationInitialization’,回车。将doAppInitAfterRestart设为true
3.点击‘集合’右侧的三个点'...'
4.点击‘新增’,输入如下两个配置项
- hostName:Hangfire 应用程序的 URL 主机
- initializationPage:hangfire的仪表板路径,例如默认的 /hangfire
- 点击‘套用’,保存配置
至此配置完成,hangfire定时任务可正常执行,此为hangfire官方文档步骤,网址:docs.hangfire.io/en/latest/d…
*还有一种简单的解决方案:不用做如上配置,先启动应用程式,然后再启动应用程式的程序池,也是可以让job正常定时执行