官方配置

http://docs.topshelf-project.com/en/latest/configuration/config_api.html#service-start-modes

topshelf

转载 2016年03月17日 13:45:13
  • 1015

topshelf和quartz内部分享

阅读目录:

  1. 介绍
  2. 基础用法
  3. 调试及安装
  4. 可选配置
  5. 多实例支持及相关资料
  6. quartz.net

上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客。

介绍

topshelf是创建windows服务的一种方式,相比原生实现ServiceBase、Install.Installer更为简单方便, 我们只需要几行代码即可实现windows服务的开发。topshelf本身支持windows及linux下mono上部署安装,同样也是开源的。

topshelf相对原生来说,调试起来比较方便,可以在开发时以控制台的形式直接f5调试,发布时用命令以服务的形式部署。还一个比较有用的特性是支持多实例的部署,这样可以在一台机器上部署多个相对的服务。类似的工具有instsrv和srvany。

基础用法

Topshelf使用起来比较简单,通过nuget直接安装即可,目前最新的是3.2版本:

问题一:不使用Package管理工具如何安装Package呢?
答:使用Package Manager Console.
 
问题二: 如何安装特定版本的程序集?
答: 在 Package Manager Console 中使用 带参数的 Install-Package 命令
通过  TooLS -> Libary Manager Console -> Package Manager Console 即可打卡面板。
输入Install-Package Microsoft.AspNet.SignalR -Version 1.1.0(使用SignaR 1.1.0 为例子)
 
问题三:如何卸载特定的Package呢?
答:使用 Uninstall-Package 命令
例如:Uninstall-Package Microsoft.AspNet.SignalR -Version 1.1.0
 

示例代码:

 HostFactory.Run(x =>
{
x.Service<Manager>(s =>
{
s.ConstructUsing(name => new Manager());
s.WhenStarted(tc => tc.OnStart());
s.WhenStopped(tc => tc.OnStop());
});
x.RunAsLocalSystem();
x.SetDescription("Topshelf测试例子");
x.SetDisplayName("TopshelfExample");
x.SetServiceName("TopshelfExample");
});

其中Run方法的回调参数方法,在运行时执行,方法内是一些配置信息。

其中manager类是我们服务实现类,服务启动时通过WhenStarted调用对应实现的OnStart,停止一样。

RunAsLocalSystem()表示以本地系统账号运行,可选的还有网络服务和本地服务账号。

SetDescription("Topshelf测试例子"); 设置服务的描述

SetDisplayName("TopshelfExample"); 设置服务的显示名称

x.SetServiceName("TopshelfExample"); 设置服务的名称

Manager服务实现类:

 public class Manager
{
public void OnStart()
{
Console.WriteLine("Service start.");
}
public void OnStop()
{
Console.WriteLine("Service stopped.");
}
}

调试及安装

调试和平常一样,直接f5即可:

安装时以管理员身份运行CMD,进入程序目录。

输入安装命令: TopshelfExample.exe install topshelf以事务的形式安装,只有成功和失败,兼容性较好,示例:

启动命令是TopshelfExample.exe start,停止TopshelfExample.exe stop

可选配置

topshelf虽小但支持的可配置选项比较多,以下是部分示例:

  • SetStartTimeout启动超时
  • SetStopTimeout停止超时
  • BeforeUninstall卸载前
  • AfterUninstall 卸载后回调
  • AfterInstall安装后回调
  • AfterRollback回滚后回调
  • DependsOnMsmq Msmq启动后再启动
  • EnablePauseAndContinue支持暂停
  • UseLog4Net (“.config")集成log4Net
  • UseNLog集成Nlog

多实例支持及相关资料

原生服务上是不支持的,topshelf支持使用不同的名称来部署多个同样的程序实例。 启动一个新实例:

TopshelfExample.exe –instance “newinstallname” install

start、top命令和原先参数格式一样,如卸载:

TopshelfExample.exe –instance "TopshelfExample2" uninstall

多实例有一个好处就是容灾,当一个服务部署多份时,这样其中任何一个服务实例挂了,剩余的可以继续执行。 多实例可以是主备的方式,主挂了备服务才会执行。也可以以负载均衡的方式实现,多实例抢占进程锁或分布式锁,谁拿到谁执行。

文档索引
github地址
topshelf命令列表
TopshelfExample.exe help

quartz.net

关于quartz.net早先有系列介绍过,只贴下链接。

Net作业调度(五)—quartz.net动态添加job设计

Net作业调度(四)—quartz.net持久化和集群

Net作业调度(三) — Quartz.Net进阶

Net作业调度(二) -CrystalQuartz远程管理

Net作业调度(一) -Quartz.Net入门

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服务

    在业务系统中,我们为了调度一些自动执行的任务或从队列中消费一些消息,所以基本上都会涉及到后台服务的开发.如果用windows service开发,非常不爽的一件事就是:调试相对麻烦,而且你还需要了解 ...

  4. C#开发windows服务如何调试——资料整理

    原文标题:C# Windows服务程序如何进行调试 原文地址:https://jingyan.baidu.com/article/456c463b18e1b00a583144b3.html 第一种: ...

  5. C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案

    本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...

  6. 使用Topshelf创建Windows服务

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

  7. Topshelf创建Windows服务

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

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

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

  9. 使用Topshelf管理Windows服务

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

随机推荐

  1. 描述ARP协议的工作原理,怎么实施ARP攻击和防御ARP攻击

    什么是ARP协议?ARP,即地址解析协议,实现通过IP地址得知其物理地址.在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址.为了让报文在 ...

  2. ASP.NET MVC:WebPageBase.cs

    ylbtech-funcation-Utility: ASP.NET MVC:WebPageBase.cs 充当表示 ASP.NET Razor 页的类的基类. 1.A,WebPageBase 抽象类 ...

  3. C# 数组基础知识

    数组的属性: 数组可以是一维.多维或交错的. 数值数组元素的默认值设置为零,而引用元素的默认值设置为 null. 交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null. 数组的索引从零开 ...

  4. 阿里NLP总监分享-NLP技术的应用与思考

    https://yq.aliyun.com/articles/78031 NLP技术的应用及思考

  5. CSS-div高度100%设置问题

    div常用的属性width和height,有的时候如果我们需要让div的高度是整个屏幕的高度,设置height:100%发现并没有什么作用,并不是这样设置不对,而是w3c规范中关于百分比的设置是相对于 ...

  6. jquery的$.extend和$.fn.extend作用及区别,兼它们的一些小细节

    $.extend(obj);是为了扩展jquery本身,为类添加新的方法   $.fn.extend(obj);给JQUERY对象添加方法.如(1): $.extend({ add:function( ...

  7. 卡尔曼滤波算法--核心公式推导导论 - ZZ

    卡尔曼滤波算法--核心公式推导导论 10 个月前 写在最前面:这是我第一篇专栏文章,感谢知乎提供这么一个平台,让自己能和大家分享知识.本人会不定期的开始更新文章,文章的内容应该集中在汽车动力学控制,整 ...

  8. JAVA-SpringMVC基于注解模式第一个应用

    项目文件结构 1. web.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <web-app x ...

  9. 什么是BFC(Block Formatting Context)

    原文:https://segmentfault.com/a/1190000012221820 https://www.w3.org/TR/CSS2/visuren.html#block-formatt ...

  10. FreeType的项目总是报error LNK2019: unresolved external symbol __imp错误

    用vs2013建立了一个c++的项目,然后在根目录放置了freetype.lib,将GitHub上面的include文件夹拷贝到本机,并且在VS中设置了额外包含目录指向这个inluce文件夹,然后将f ...