我有這將被更新〜每兩週如何正確處理一個.net窗口服務,勤換
我已經有了一個DLL中的所有有用的代碼,該服務的窗口服務只是簡單的Start
和Stop
方法映射到DLL中的相同方法。
我使用控制檯應用程序開發/調試DLL,所以我想知道;而不是服務直接引用DLL並且每次執行更新時都需要卸載/重新安裝,那麼使用服務來包裝控制檯應用程序是否有任何缺點?
這就是說,而不是...
Private MyService as IMyService
Sub Start()
MyService = New MyService()
MyService.StartAsync()
End Start
做這樣的事情......
Const ServiceExecutablePath As String = "C:\Blah\MyService.exe"
Private MyService as Process
Sub Start()
MyService = Process.Start(ServiceExecutablePath)
End Start
這樣,如果我要發佈,所有我需要做的是停止該服務,替換可執行文件(和相關的DLL),然後再次啓動它。
我還沒有完全搞清楚如何做一個優雅的關機呢。控制檯應用程序偵聽CTRL C中斷和調用MyService.Shutdown(Graceful:=True)
(阻塞調用)。我應該嘗試從服務內模仿還是有更好的方法?
我們已經在整個DI中使用了Unity。我知道MEF,但沒有使用它。我希望將服務中的代碼保持在絕對最低限度,以減少難以調試問題的風險。我需要多少? – Basic 2012-07-07 00:46:40
MEF易於安裝(它現在是.net框架的一部分),可以與DI容器並排使用,因爲DI不是主要目標,而是副作用。看看例子。 – Fernando 2012-07-07 01:00:09
@Basic,請看看這個TopShelf的例子:http://topshelf-project.com/documentation/shelving/。 – Fernando 2012-07-07 01:02:51