利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务

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实现方法



  1. 先实现IHostLifetime接口来接管应用程序的生命周期,其实就是用空的实现来替换掉默认的ConsoleLifetime,这样就可以在之后由Topshelf框架内部去管理生命周期。



    640?wx_fmt=png

  2. 然后实现IHostedService接口,把后台任务逻辑写到StartAsync方法中,参见官方文档《在 ASP.NET Core 中使用托管服务实现后台任务》,本文示例使用定时写入文本到一个文件来测试定时任务是否成功运行。


    640?wx_fmt=png

  3. 构建Generic Host,在ConfigureServices方法中注册TopshelfLifetime,并且注册一个托管服务FileWriterService,就能完成Generic Host的简单构建,当然完整的项目应该还包含配置、日志等等。最后,使用Topshelf来接管Generic Host,创建Windows服务。


    640?wx_fmt=png

  4. 最后发布应用程序,并安装到Windows服务。

以管理员权限开启终端,执行命令:

640?wx_fmt=png

这样这个Windows服务就启动了!查看输出文件,可以看到定时写入成功,服务也一直没关闭~

640?wx_fmt=png1|2示例代码https://github.com/ElderJames/GenericHostWindowsServiceWithTopshelf

1|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

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源项目商业模式分析(2) - 持续维护的重要性 - Selenium和WatiN

该系列第一篇发布后收到不少反馈,包括:第一篇里说的MonicaHQ不一定盈利没错,但是问题在于绝大多数开源项目商业数据并没有公开,从而无法判断其具体是否盈利。难得MonicaHQ是公开的,所以才用来做这系列文章的开篇。很多…

深入业务成为更好的软件架构师——信息化建设图鉴一二例

软件开发实际上跟英语比较类似,都是一项工具,服务于各行各业。从程序员的个人修养上来讲,一是要研习好软件开发这门技艺,二是要深入到所服务的行业。说到底,软件的终极目标是模拟业务,在此期间常常会有一个…

恭贺微软技术俱乐部苏州站正式成立

今天去苏州微软中国,参加了微软技术俱乐部苏州站的成立大会。大会的历程悉数经历,这会儿仍在为各位大佬、社区领袖的奉献精神所感动。在通过我们公司同事分享的链接报名时就了解到,大会上有苏震巍老师和蒋金楠老师的分享,便笃定了…

[HNOI2013]消毒 (匈牙利最大匹配)

Description 最近在生物实验室工作的小T遇到了大麻烦。 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a、b、c 均为正整数。为了实验的方便,它被划分为abc个单位立方体区域,每个单位立方体尺寸为111。用(i,…

.NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇

前言 最近一直在忙公司和私下的兼职,白天十个小时,晚上四个小时,感觉每天都是打了鸡血似的,精神满满的,连自己那已经学打酱油的娃都很少关心,也有很长一段时间没有更新博客了,特别抱歉&#…

[NOI2009] 变换序列 (匈牙利最大匹配)

description … solution 我竟然一眼题!! 变换后的TTT数组是[0,n)[0,n)[0,n)的排列,变换规则也有,距离DDD也知道 很明显可以求出iii的可能变换对象 这不就是个最大匹配?? 无解就是匹配数量达不到nnn罢了…

使用 WeihanLi.Npoi 操作 CSV

Intro最近发现 csv 文件在很多情况下都在使用,而且经过大致了解,csv 格式简单,相比 excel 文件要小很多,读取也很是方便,而且也很通用,微软的 ml.net 的示例项目 用来训练模型的数据也是使用的 csv 来保存的…

种类问题

几乎所有种类问题都可以转化成两种模型之一 1.直接维护ans数组 2.统计二维数点问题 前置知识 二维静态数点 以y为第一元素,x为第二元素,原点优先级大于查询点,对所有点(原点查询点),然后求 for(int i1;…

「LibreOJ Round #11」Misaka Network 与测试 (网络流跑二分图匹配)

description 研究者们想要测试 Misaka Network,于是他们把 Misaka Network 中的所有妹妹们召集到了一起。 现在妹妹们排成了 N行 M 列,有的位置没有人。现在研究者们给每一个个体的超能力进行了评定,一共有三个能力等级:Level 1 …

YbtOJ-相似子串【SA,RMQ,二分】

正题 题目大意 给出一个长度为nnn的字符串,两个串相似当且仅当可以通过每种字符置换使得它们相同。 qqq次询问这个字符串所有子串中和这个串中sl,rs_{l,r}sl,r​子串有多少个相似的。 1≤n≤105,1≤q≤51051\leq n\leq 10^5,1\leq q\leq 5\times 10^51≤n≤105,1≤…

程序员修仙之路--把用户访问记录优化到极致

点击上方蓝色字体,关注我们菜菜呀,前几天做的用户空间,用户反映有时候比较慢呀CEO,CTO,CFO于一身的CXO是吗?菜菜我把你拉进用户反馈群,你解决一下呀CEO,CTO,CFO于一身的CXO(完了,以后没清净时候…

[国家集训队]航班安排 (最大费用最大流)

description 神犇航空有K架飞机,为了简化问题,我们认为每架飞机都是相同的。神犇航空的世界中有N个机场,以0…N-1编号,其中0号为基地机场,每天0时刻起飞机才可以从该机场起飞,并不晚于T时刻回到该机场。一…

新数据革命:开源图形化数据引擎Hawk5发布

Hawk是一款开源图形化的爬虫和数据清洗工具,GitHub Star超过2k,前几代版本介绍如下:Hawk3: 终于等到你: 图形化开源爬虫Hawk 3发布!Hawk2: 120项优化: 超级爬虫Hawk 2.0重磅发布!Hawk1: 如何从互联网采集海量数据?租房…

[TJOI2018]智力竞赛 (匈牙利)

description 题目描述 小豆报名参加智力竞赛,他带上了 n个好朋友作为亲友团一块来参加比赛。 比赛规则如下:一共有 m道题目,每个人都有 1 次答题机会,每次答题为选择一道题目回答,在回答正确后,可以从这个…

ASP.NET Core如何在ActionFilterAttribute里做依赖注入

点击蓝字关注我在ASP.NET Core里,我们可以使用构造函数注入很方便地对Controller,ViewComponent等部件做依赖注入。但是如何给过滤器ActionFilterAttribute也用上构造函数注入呢?问题我的博客系统里有个用来删除订阅文件缓存的ActionFilter&a…

[八省联考2018]劈配 (匈牙利)

description 一年一度的综艺节目《中国新代码》又开始了。Zayid 从小就梦想成为一名程序员,他觉得这是一个展示自己的舞台,于是他毫不犹豫地报名了。 轻车熟路的 Zayid 顺利地通过了海选,接下来的环节是导师盲选,这一阶段的规则…

助力苏州、星火相传,广苏两地微软技术俱乐部交流纪实

2019年1月19日时值二十四节气“大寒”前夕,江南水乡冬日的寒气盖不住苏州.NET开发者的热情,就在这一天苏州微软技术俱乐部成立了并举办了第一场大型的线下交流活动。星火相传2018年12月8日广州.NET微软技术俱乐部举办了恢复以来的第一场大型线下技术交流…

微软技术专家为您解读深度学习

随着阿尔法狗、无人驾驶、智能翻译的横空出世,“人工智能”这个已经存在60多年的词语,仿佛一夜之间重新成为热词。同时被科技圈和企业界广泛提及的还有“机器学习”“深度学习”“神经网络”…… 但如此喧嚣热烈的气氛之下,大部分人对这一领域…

「LibreOJ NOI Round #2」不等关系 (dp+NTT分治)

description 戳我看题目哦 solution 有一道非常相似的题目 一棵树&#xff0c;每条边限制两个端点的大小关系&#xff08;限制 a[u]>a[v]a[u]>a[v]a[u]>a[v] 或 a[u]<a[v]a[u]<a[v]a[u]<a[v]&#xff09; 求有多少种符合要求的排列aaa满足整棵树的限制。n…

PCB 机器学习(ML.NET)初体验实现PCB加投率预测

使用ML.NET建立PCB加投率模型对单一蚀刻工序进行加投率预测, 此实例为最简单预测&#xff0c;要想实现全流程加投率预测挑战难度还是挺大的&#xff0c;可以查看另一种关于大数据在PCB行业应用---加投率计算基本原理:PCB 加投率计算实现基本原理--K最近邻算法&#xff08;KNN&a…