在业务系统中,我们为了调度一些自动执行的任务或从队列中消费一些消息,所以基本上都会涉及到后台服务的开发。如果用windows service开发,非常不爽的一件事就是:调试相对麻烦,而且你还需要了解 windows service 相关的一些开发和安装部署,所以,windows service非常的不方便。Topshelf框架,能够让你将 console application 直接封装为 windows service,这样你在开发的时候,就可以直接在console 程序上开发,然后构成windows service。可以说非常方便。省去了很多不必要的麻烦。

  Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。TopShelf 支持多个服务实例,使用的API非常简单,也提高了和 Log4Net的集成,结合Quartz.net,可以快速实现任务调度服务。

  1.下载地址

    https://github.com/Topshelf/Topshelf/downloads

  2.创建Console宿主程序TopshelfTest,并引用TopShelf.dll

  3.相关代码

public class TownCrier
{ readonly Timer _timer; public TownCrier()
{ _timer = new Timer() { AutoReset = true }; _timer.Elapsed += (sender, eventArgs) => Console.WriteLine("It is {0} and all is well", DateTime.Now); } public void Start() { _timer.Start(); } public void Stop() { _timer.Stop(); } } // 入口代码 public class Program
{ public static void Main()
{ HostFactory.Run(x => //1.我们用HostFactory.Run来设置一个宿主主机。我们初始化一个新的lambda表达式X,来显示这个宿主主机的全部配置。
{ x.Service<TownCrier>(s =>   //2.告诉Topshelf ,有一个类型为“towncrier服务”,通过定义的lambda 表达式的方式,配置相关的参数。
{ s.ConstructUsing(name => new TownCrier());     //3.告诉Topshelf如何创建这个服务的实例,目前的方式是通过new 的方式,但是也可以通过Ioc 容器的方式:getInstance<towncrier>()。
  
s.WhenStarted(tc => tc.Start()); //4.开始 Topshelf 服务。 s.WhenStopped(tc => tc.Stop()); //5.停止 Topshelf 服务。 }); x.RunAsLocalSystem(); //6.这里使用RunAsLocalSystem() 的方式运行,也可以使用命令行(RunAsPrompt())等方式运行。 x.SetDescription("Sample Topshelf Host");      //7.设置towncrier服务在服务监控中的描述。 x.SetDisplayName("Stuff"); //8.设置towncrier服务在服务监控中的显示名字。 x.SetServiceName("Stuff"); //9.设置towncrier服务在服务监控中的服务名字。 }); } }

  本人英文水平有限,代码的备注说明,随便翻译的,凑合看吧。

  4. 安装和卸载windows服务

TopshelfTest.exe install        #安装Windows服务

     TopshelfTest.exe uninstall     #卸载Windows服务

     TopshelfTest.exe install -instance "xxx" -servicename "xxx" -description "xxx" -displayname "xxx"    #安装不同的实例

使用Topshelf 开发windows服务的更多相关文章

  1. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  2. 使用Topshelf开发Windows服务、log4net记录日志

    开发windows服务,除了在vs里新建服务项目外(之前有写过具体开发方法,可点击查看),还可以使用Topshelf. 不过使用topshelf需要.netframework 4.5.2版本,在vs2 ...

  3. topshelf 开发windows 服务资料

    官方配置 http://docs.topshelf-project.com/en/latest/configuration/config_api.html#service-start-modes to ...

  4. 使用Topshelf创建Windows服务

    概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...

  5. Topshelf创建Windows服务

    使用Topshelf创建Windows服务 概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps ...

  6. C#开发Windows服务详细流程

    1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...

  7. 使用Topshelf管理Windows服务

    目的:以控制台方式开发Windows服务程序,调试部署方便. https://www.cnblogs.com/itjeff/p/8316244.html https://www.cnblogs.com ...

  8. 【第三方插件】使用Topshelf创建Windows服务

    概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...

  9. c#金额转换成中文大写金额 .Net开发Windows服务

    c#金额转换成中文大写金额   2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> ...

随机推荐

  1. 【BZOJ 3083】遥远的国度

    这道题很简单的连剖+分类讨论,但是SDOI Round2要来了,不会手动栈怎么办呢?只好用一下这道题练习一下手动栈了,结果调了一天多QwQ 链剖的第一个dfs用bfs水过就行,但是我自以为是地把倍增写 ...

  2. javascript 红宝书笔记之如何使用对象 如何操作数组

    对象定义  ===  引用类型,描述的是一类对象所具有的属性和方法     新对象的创建 方法     new + 构造函数       var person = new Object(); 对象字面 ...

  3. 一起学HTML基础-利用CSS和JavaScript制作一个切换图片的网页

    由于个人原因,不详细写步骤 思路: 一.布局 二.制作图片区和按钮区的div及颜色.边框.背景属性等 三.用PS将四张图片剪切到同一个尺寸,重叠放置在图片切换区,透明度设置为0 四.点击对应按钮时,将 ...

  4. 12 抽象函数-abstract

    只有函数的定义,没有函数体的函数被称为抽象函数 1.抽象函数就是没有函数体的函数 2.抽象类使用abstract来定义 3.抽象类不能生产对象,但是可以拥有构造函数 abstract void fun ...

  5. 【HDU 1150】Machine Schedule(二分图匹配)

    机器的不同模式为点,对于每个job,建两条边 A机器需要的模式<->B机器需要的模式. 问题转化为最小点覆盖,然后用二分图的最小点覆盖==最大匹配,用匈牙利算法解. #include &l ...

  6. 由一段JS代码引发的思考

    不知道大家在编程的时候有没有遇到过这种情况,就是在循环遍历删除一部分内容的时候,发现只能删除其中一部分,而另一部分却总也删不掉,然后觉得自己的逻辑没有问题啊,于是陷入了深深的抑郁之中…… 昨天在处理一 ...

  7. 运行python代码报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 91: ordinal not in range(128)的解决办法

    1.通过搜集网上的资料,自己多次尝试,问题算是解决了,在代码中加上如下几句即可: import sys reload(sys) sys.setdefaultencoding('utf-8') 2.原因 ...

  8. OPENGL——背面剔除

    Opengl 表面剔除是提高 Opengl 程序渲染效率的一个有效途径. 我们知道,OpenGL 渲染的基本单位是一个个的三角形面片.无论多么复杂的3D 模 型都是由一个个基本的三角型的面片组成的. ...

  9. u Calculate e阶乘相加求和问题

    问题: (n < 10)写个算法 回答: 方法一: #include<stdio.h>  int main()  {      int f[10]={1,1,2,6,24,120,7 ...

  10. java高新技术-代理

    程序中代理的概念与作用 要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理.日志.计算方法的运行时间.事务管理.等等. 代理架构图: 如果采用工厂模式和配置文件的方式进行管 ...