.NETCore部署IIS无法启动Hangfire该怎么办

本篇文章为大家展示了.NET Core 部署IIS无法启动Hangfire该怎么办,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

站在用户的角度思考问题,与客户深入沟通,找到崇左网站设计与崇左网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、网站设计、外贸网站建设、企业官网、英文网站、手机端网站、网站推广、域名与空间、网站空间、企业邮箱。业务覆盖崇左地区。

不知道是否有童鞋遇到过将.NET Core部署到IIS上时,但Hangfire无法启动,自然而然也就导致作业无法良好运行的问题,本文给出两个方案。

Hangfire部署IIS

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

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

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的无托管应用程序池,继而创建网站,如下图所示

.NET Core 部署IIS无法启动Hangfire该怎么办


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

.NET Core 部署IIS无法启动Hangfire该怎么办

IIS启动Hangfire方案

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

.NET Core 部署IIS无法启动Hangfire该怎么办

然后手动访问下网站,接下来我们就可以看到日志文件

.NET Core 部署IIS无法启动Hangfire该怎么办

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

.NET Core 部署IIS无法启动Hangfire该怎么办

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

那么究竟是什么原因导致必须手动访问网站才能启动Hangfire呢?

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

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

唯一能想到的则是.NET Core应用程序池,所以接下来我们尝试,当我们发布程序到IIS时首先将.NET Core应用程序池停止,创建完网站后再将该程序池启动,如下:

.NET Core 部署IIS无法启动Hangfire该怎么办

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

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

上述内容就是.NET Core 部署IIS无法启动Hangfire该怎么办,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


名称栏目:.NETCore部署IIS无法启动Hangfire该怎么办
分享地址:http://scyanting.com/article/gpseie.html