开发便于运维的Windows服务
过去几个月,DevOps on Windows网站推出了一系列文章,详细讲解了开发者应怎样创建便于运维的Windows服务。这一系列文章详细分析了如何克服在运维部门看来最困难的部分:Windows服务的安装与其启动阶段。
其中有些困难是由于安装基于.Net的Windows服务时,普遍使用了InstallUtil这个非原生的Windows工具。同时要特别当心启动阶段的代码,它应在启动失败时确保提供清晰的错误信息,并且要能够支持运行时间较长的操作,例如从数据库中装载与缓存数据。
DevOps on Windows网站为应对这些挑战提出的建议是基于某个非常简单的框架来创建Windows服务,这个框架的基本前提是自包含性:即某个Windows服务应用必须了解如何安装自己,并且妥善地处理启动阶段的各种错误。这个框架最主要的部分是以下三个类:BasicServiceInstaller、BasicService与BasicServiceStarter。
BasicServiceInstaller提供了自行安装与卸载的功能,它为应用程序返回一个Installer对象,这个类提供了创建定制化安装过程的基本功能。自行安装功能意味着运维团队不需要再使用sc或InstallUtil之类的外部工具了。
BasicService确保你在启动阶段正确地与服务控制管理器进行交互,作为一种最佳实践。这个Windows进程会管理所有已注册的Windows服务的方方面面,包括它们的整个生命周期,并在此阶段决定这些服务所应遵循的规则。BasicService在以下两个方面为你提供帮助:它首先确保Windows服务无法启动时,会将有意义的错误代码返回给服务控制管理器。其次,它帮助开发者在启动阶段执行运行时间较长的操作,并且不必担心服务控制管理器会强制中止这个Windows服务。
最后,BasicServiceStarter将负责决定这个应用的运作模式:安装服务、卸载服务、以控制台方式运行,或者是以Windows服务方式运行。BasicServiceStarter还确保在Windows服务启动阶段可能发生的任何后台线程的异常信息都将报告给Windows事件日志。
这一系列共包含7篇文章,详细解释了这个框架的各种细节。这个网站的观点是:“与其关注于自动化,不如更加关注于你的软件的一致性与简单性”。
查看英文原文:Operations-Friendly Windows Services
最新文章
- kaggle入门2——改进特征
- [转]完美洗牌(Perfect Shuffle)问题
- Java List合并去重
- Linux tr命令
- ivy,ivyde插件-eclipse
- JAVA基础知识之多线程——线程同步
- [shell基础]——uniq命令
- python基础教程_学习笔记14:标准库:一些最爱——re
- c# Buffer.BlockCopy 合并 byte 数组
- Flex性能调优相关的一些总结
- iis正确安装了,但是还是无法访问,这是iis和.net安装顺序问题,记录一下
- mysql 正则表达式问号
- Servlet跳转到JSP页面后的路径问题相关解释
- 6.3Pytyhon文件的操作(三)
- hdu 5726 GCD 暴力倍增rmq
- VC CListCtrl 第一列列宽自适应
- WINRAR 自解压脚本命令及变量
- 2019.1.2 Spring管理事务的方式
- 算法笔记_054:Prim算法(Java)
- 我所认识的XPath