.NET Core 部署IIS没法启动Hangfire方案

【导读】不知道是否有童鞋遇到过将.NET Core部署到IIS上时,但Hangfire没法启动,天然而然也就致使做业没法良好运行的问题,本文给出两个方案,不知是否有完美解决方案,如有,请于留言中给出,谢谢。


Hangfire部署IISweb


相信有一部分童鞋在.NET Core上利用Hangfire来进行做业计划,不管是一触即发,仍是延迟,抑或是周期Hangfire都能很好的支持,可是若将Hangfire应用于实际生产环境时,咱们会发现存在不少问题,这些问题只有实践事后才能体会到各类坑,但更深刻的资料网上并无,只能靠经验或依托源码摸索。微信


配置什么的就不过多废话,咱们实现一个很简单的Hangfire周期做业,而后将一段字符串输入到文本上,以下周期做业:app

RecurringJob.AddOrUpdate(
      () => File.WriteAllLines(Path.Combine(AppContext.BaseDirectory, "hangfire-demo.txt"), new[] { "Recurring" }),
      Cron.Minutely());


要将.NET Core寄宿在IIS运行除了安装必须的runtime外,还需安装对应版本的host-bundle模块,这里以.NET Core 3.1为例,因此安装名为【dotnet-hosting-3.1.0-win】的host-bundle,至于缘由请自行察看官方文档
编辑器


紧接着咱们打开IIS,建立.NET Core的无托管应用程序池,继而建立网站,以下图所示网站


而后咱们就等啊等,等到花儿都快谢了,最终咱们会发现过了几分钟后然鹅并无在以下图文本中输出字符串,你说气人不ui




IIS启动Hangfire方案spa


首先咱们在web.config里打开.NET Core默认日志输出,将该属性设置为ture便可,以下图所示
.net


而后手动访问下网站,接下来咱们就能够看到日志文件3d

请客官稍等片刻,紧接着就启动了Hangfire后台服务并输出了字符串到文件中
日志

就是这样,必须手动访问下网站才能在IIS上启动Hangfire,Hangfire本就做为后台做业服务去启动业务做业,如今反过来还得手动鞭策一下才能启动,有意思。


那么到底是什么缘由致使必须手动访问网站才能启动Hangfire呢?


那咱们是否能够理解为网站的启动并不会使.NET Core程序启动,换言之也就是不会执行startup,只有第一次访问时才会执行呢?


那么咱们是否经过什么方式使得网站启动时,程序也进行了执行(即执行startup呢)


惟一能想到的则是.NET Core应用程序池,因此接下来咱们尝试,当咱们发布程序到IIS时首先将.NET Core应用程序池中止,建立完网站后再将该程序池启动,以下:


此时咱们将发如今启用了.NET Core默认文件日志输出后,将会自动如上生成日志文件,从而很好的启用了Hangire后台做业服务。


综上所述在IIS上想要启动Hangfire做业服务,要么手动访问下网站,要么在网站启动后再启动.NET Core无托管应用程序池。


以上纯属我我的的猜想和分析,如有错误之处,还请批评指正,谢谢。

本文分享自微信公众号 - JeffckyShare(JeffckyShare)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索