过去几个月,DevOps on Windows网站推出了一系列文章,详细讲解了开发者应怎样创建便于运维的Windows服务。这一系列文章详细分析了如何克服在运维部门看来最困难的部分:Windows服务的安装与其启动阶段。

其中有些困难是由于安装基于.Net的Windows服务时,普遍使用了InstallUtil这个非原生的Windows工具。同时要特别当心启动阶段的代码,它应在启动失败时确保提供清晰的错误信息,并且要能够支持运行时间较长的操作,例如从数据库中装载与缓存数据。

DevOps on Windows网站为应对这些挑战提出的建议是基于某个非常简单的框架来创建Windows服务,这个框架的基本前提是自包含性:即某个Windows服务应用必须了解如何安装自己,并且妥善地处理启动阶段的各种错误。这个框架最主要的部分是以下三个类:BasicServiceInstallerBasicServiceBasicServiceStarter

BasicServiceInstaller提供了自行安装与卸载的功能,它为应用程序返回一个Installer对象,这个类提供了创建定制化安装过程的基本功能。自行安装功能意味着运维团队不需要再使用sc或InstallUtil之类的外部工具了。

BasicService确保你在启动阶段正确地与服务控制管理器进行交互,作为一种最佳实践。这个Windows进程会管理所有已注册的Windows服务的方方面面,包括它们的整个生命周期,并在此阶段决定这些服务所应遵循的规则。BasicService在以下两个方面为你提供帮助:它首先确保Windows服务无法启动时,会将有意义的错误代码返回给服务控制管理器。其次,它帮助开发者在启动阶段执行运行时间较长的操作,并且不必担心服务控制管理器会强制中止这个Windows服务。

最后,BasicServiceStarter将负责决定这个应用的运作模式:安装服务、卸载服务、以控制台方式运行,或者是以Windows服务方式运行。BasicServiceStarter还确保在Windows服务启动阶段可能发生的任何后台线程的异常信息都将报告给Windows事件日志。

这一系列共包含7篇文章,详细解释了这个框架的各种细节。这个网站的观点是:“与其关注于自动化,不如更加关注于你的软件的一致性与简单性”。

查看英文原文:Operations-Friendly Windows Services

最新文章

  1. kaggle入门2——改进特征
  2. [转]完美洗牌(Perfect Shuffle)问题
  3. Java List合并去重
  4. Linux tr命令
  5. ivy,ivyde插件-eclipse
  6. JAVA基础知识之多线程——线程同步
  7. [shell基础]——uniq命令
  8. python基础教程_学习笔记14:标准库:一些最爱——re
  9. c# Buffer.BlockCopy 合并 byte 数组
  10. Flex性能调优相关的一些总结
  11. iis正确安装了,但是还是无法访问,这是iis和.net安装顺序问题,记录一下
  12. mysql 正则表达式问号
  13. Servlet跳转到JSP页面后的路径问题相关解释
  14. 6.3Pytyhon文件的操作(三)
  15. hdu 5726 GCD 暴力倍增rmq
  16. VC CListCtrl 第一列列宽自适应
  17. WINRAR 自解压脚本命令及变量
  18. 2019.1.2 Spring管理事务的方式
  19. 算法笔记_054:Prim算法(Java)
  20. 我所认识的XPath

热门文章

  1. 收缩SQL Server数据库文件
  2. 转:SqlServer2012自增列值突然增大1000的原因及解决方法
  3. 3.4.4 数据预留和对齐(skb_reserve, skb_push, skb_put, skb_pull)
  4. C语言的一些小知识
  5. 虚拟机主机能互相ping通,但是无法远程连接
  6. for循环每次取出一个字符(不是字节)
  7. 【面试题】M
  8. java-并发-活性
  9. 第二天ci项目规划 前后台分离
  10. WPF中获取鼠标相对于桌面位置