過去幾個月,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篇文章,詳細解釋了這個框架的各種細節。這個網站的觀點是:“與其關注于自動化,不如更加關注于你的軟件的一致性與簡單性”。
文章列表