topshelf 开发windows 服务资料
官方配置
http://docs.topshelf-project.com/en/latest/configuration/config_api.html#service-start-modes
topshelf
topshelf和quartz内部分享
阅读目录:
上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客。
介绍
topshelf是创建windows服务的一种方式,相比原生实现ServiceBase、Install.Installer更为简单方便, 我们只需要几行代码即可实现windows服务的开发。topshelf本身支持windows及linux下mono上部署安装,同样也是开源的。
topshelf相对原生来说,调试起来比较方便,可以在开发时以控制台的形式直接f5调试,发布时用命令以服务的形式部署。还一个比较有用的特性是支持多实例的部署,这样可以在一台机器上部署多个相对的服务。类似的工具有instsrv和srvany。
基础用法
Topshelf使用起来比较简单,通过nuget直接安装即可,目前最新的是3.2版本:
示例代码:
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早先有系列介绍过,只贴下链接。
最新文章
- PhoneGap介绍及简单部署
- Windows Server 2012中安装Active Directory域服务
- EL表达式(胖先生版)
- POJ3258River Hopscotch(二分)
- __init__ __new__区别
- JMS-activeMQ
- C#正则表达式匹配任意字符
- 在cocos2d-x界面中嵌入Android的WebView
- 解决 Mybatis 元素类型为 ";resultMap"; 的内容必须匹配 ";(constructor?,id*,result*,association*,collection*,discriminat
- CSharp设计模式读书笔记(17):迭代器模式(学习难度:★★★☆☆,使用频率:★★★★★)
- selenium+python自动化测试系列(二):AutoIt工具实现本地文件上传
- bootstrap例子
- PHP读写Excel
- python事件驱动的小例子
- Weblogic CVE-2018-3191远程代码命令执行漏洞复现
- cesiumjs学习笔记之三——cesium-navigation插件 【转】
- Linux ulimit 命令
- 读TIJ -7 多形性
- vue+node+mongoDB 火车票H5(一)---准备工作,基本配置
- python 最简单的web应用(一)
热门文章
- Team Foundation(通常记作“TFS”)
- 算法: 实现LRU缓存,读取、写入O(1)实现
- 如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件
- 在Cygwin里,如何进入到C盘?
- Github用.gitignore忽略指定文件
- win8下Source Insight has not been installed completely问题的解决
- CentOS7.1 Liberty云平台之环境准备(2)
- ASP入门(四)-VBScript的流程控制语句
- 免费素材:气球样式的图标集(PSD, SVG, PNG)
- 重设域管理员密码-window server 2008 R2