襄阳市建设公司网站,自媒体多平台发布工具,企业网站的建设对于网络品牌的塑造作用,南京做网站引流的公司2019第一篇文章。此文源于前公司在迁移项目到.NET Core的过程中#xff0c;希望使用Generic Host来管理定时任务程序时#xff0c;没法部署到Windows服务的问题#xff0c;而且官方也没给出解决方案#xff0c;只能关注一下官方issue #809 等他们方解决了。官方文档只提供了… 2019第一篇文章。此文源于前公司在迁移项目到.NET Core的过程中希望使用Generic Host来管理定时任务程序时没法部署到Windows服务的问题而且官方也没给出解决方案只能关注一下官方issue #809 等他们方解决了。官方文档只提供了一个《在 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服务最终成功了。1|1实现方法先实现IHostLifetime接口来接管应用程序的生命周期其实就是用空的实现来替换掉默认的ConsoleLifetime这样就可以在之后由Topshelf框架内部去管理生命周期。然后实现IHostedService接口把后台任务逻辑写到StartAsync方法中参见官方文档《在 ASP.NET Core 中使用托管服务实现后台任务》本文示例使用定时写入文本到一个文件来测试定时任务是否成功运行。构建Generic Host在ConfigureServices方法中注册TopshelfLifetime并且注册一个托管服务FileWriterService就能完成Generic Host的简单构建当然完整的项目应该还包含配置、日志等等。最后使用Topshelf来接管Generic Host创建Windows服务。最后发布应用程序并安装到Windows服务。以管理员权限开启终端执行命令这样这个Windows服务就启动了查看输出文件可以看到定时写入成功服务也一直没关闭~1|2示例代码https://github.com/ElderJames/GenericHostWindowsServiceWithTopshelf1|3参考链接官方文档《.NET 通用主机》官方文档《在 ASP.NET Core 中使用托管服务实现后台任务》原文地址:https://www.cnblogs.com/ElderJames/p/Using-Topshelf-To-Deploy-Net-Core-Generic-Host-App-To-Windows-Services.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com