wcf的寄宿方式多種多樣,今天我們一起來探討一下windows 服務的寄宿方式,其實明白了控制台的寄宿方式,在windows下的寄宿方式也是一樣,只不過是操作方式有點區別。編程代碼基本是一樣的。
我們首先創建一個window 服務應用程序,然后在service1.cs設計界面中添加安裝程序,這些都是我們創建windows服務應用程序應該熟知的步驟,我就不再贅述了,我們需要做的就是把控制台程序中的添加服務宿主的代碼拷貝到windows服務應用程序中。
1 protected override void OnStart(string[] args) 2 { 3 4 using (ServiceHost host = new ServiceHost(typeof(CalService), new Uri("http://127.0.0.1:9999/calService"))) 5 { 6 7 host.AddServiceEndpoint(typeof(ICal), new WSHttpBinding(), ""); 8 if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null) 9 { 10 ServiceMetadataBehavior behavior = new ServiceMetadataBehavior(); 11 behavior.HttpGetUrl = new Uri("http://127.0.0.1:999/calService/mex"); 12 behavior.HttpGetEnabled = true; 13 host.Description.Behaviors.Add(behavior); 14 } 15 if (host.State != CommunicationState.Opening) 16 { 17 host.Open(); 18 19 } 20 } 21 }
代碼基本沒變,唯一變的就是代碼放置的位置,我們放置到了windows服務啟動的事件中。這樣我們就可以在windows服務寄宿的時候,通過瀏覽器瀏覽到我們創建的服務元數據。
下面就是安裝這個windows服務應用程序了,我們不能像控制台程序那樣直接在vs中運行,windows服務應用程序必須安裝到操作系統中才可以。我們采用的就是installUtil.exe 這個工具,定位到我們windows程序的目錄,然后執行,就可以把服務安裝到操作系統中,如果要卸載服務,只需在安裝的路徑后面添加-u即可卸載。
安裝了服務,我們確保服務啟動以后,就可以正常在瀏覽器中瀏覽了。
上面只是簡單介紹了windows服務的編碼實現,沒有用到配置文件,和控制台程序一樣,我不再贅述了。下面說說我為什么要單獨把windows服務,操作那么簡單的單獨拿出來說呢:
- windows服務可以在系統后台長時間運行,由操作系統控制。
- windows服務可以通過管理器方便的暫停、停止、啟動,方便管理程序。
- 最重要的一點就是windows服務是我們開發中常用到的,我們不可能運行一個控制台程序一直在服務器運行,因為不知道哪個人就會關閉掉,安全性較差。
- 當然了,簡單的運行wcf服務在windows服務中還看不出來復雜性,隨着項目的復雜,配置項也是方便管理的,因為可以停止、重新啟動。睡覺了。拜拜