过去几个月, 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 篇文章,详细解释了这个框架的各种细节。这个网站的观点是:“与其关注于自动化,不如更加关注于你的软件的一致性与简单性”。
评论