十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇文章为大家展示了如何利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
创新互联于2013年创立,先为恩施土家等服务建站,恩施土家等地企业,进行企业商务咨询服务。为恩施土家企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
官方文档只提供了一个《在 Windows 服务中托管 ASP.NET Core》的方案,可以使用Microsoft.AspNetCore.Hosting.WindowsServices
类库来把Web应用部署为Windows服务。但是ASP.NET Core虽然是控制台程序,但是它本身是使用了含有HTTP管道的Web Host来负责应用程序的生命周期管理,用它来作为定时任务的话,会有很多不必要的工作负载,例如占用端口、增加了很多依赖等等。
官方意识到这个问题之后,在.NET Core 2.1版本新增了Generic Host通用主机,剥离了原来WebHost的Http管道相关的API,源码中可以发现Web Host已经基于Generic Host实现。它才是作为纯粹定时任务程序的最佳拍档。
但是由于Generic Host本身非常简单,用它运行的程序设置在注册为Windows服务启动之后会自动停止。研究很久之后才知道,想在Windows上启动服务,还是不能像Linux上那么简单——
于是尝试结合Topshelf来创建Windows服务,最终成功了。
先实现IHostLifetime
接口来接管应用程序的生命周期,其实就是用空的实现来替换掉默认的ConsoleLifetime,这样就可以在之后由Topshelf框架内部去管理生命周期。
然后实现IHostedService
接口,把后台任务逻辑写到StartAsync
方法中,参见官方文档《在 ASP.NET Core 中使用托管服务实现后台任务》,本文示例使用定时写入文本到一个文件来测试定时任务是否成功运行。
构建Generic Host,在ConfigureServices
方法中注册TopshelfLifetime
,并且注册一个托管服务FileWriterService
,就能完成Generic Host的简单构建,当然完整的项目应该还包含配置、日志等等。最后,使用Topshelf来接管Generic Host,创建Windows服务。
最后发布应用程序,并安装到Windows服务。
以管理员权限开启终端,执行命令:
这样这个Windows服务就启动了!查看输出文件,可以看到定时写入成功,服务也一直没关闭~
上述内容就是如何利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。