天天看點

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

WCF寄宿方式是一種非常靈活的操作,可以在IIS服務、Windows服務、Winform程式、控制台程式中進行寄宿,進而實作WCF服務的運作,為調用者友善、高效提供服務調用。本文分别對這幾種方式進行詳細介紹并開發例子進行說明,以求大家對WCF寄宿的方式進行全面的認識和了解。

我在我前面幾篇WCF開發架構的介紹文章中,介紹過了WCF常用的一種寄宿方式,IIS服務寄宿。這種寄宿方式是最為友善的方式,而且由于服務隻需要IIS運作就能自動運作起來,是以廣為使用。

建立這種方式IIS寄宿方式的,隻需要在解決方案裡面,添加WCF服務應用程式,就可以生成這種的服務子產品了。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

這個是一個基于Web的應用程式,建立項目後會生成一個Service1.svc的服務頁面,以及相關的WCF服務接口和實作,如下圖所示。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

這個就是簡單的WCF服務,當然如果是複雜的實際應用,會考慮和資料庫打交道,而且可能項目會分成幾個進行管理,進而實作更好的邏輯分離操作。

除了上面常用的IIS服務寄宿,一般還會有各種各樣的寄宿方式,不過如果采用其他方式的寄宿方式,一般會把WCF服務和寄宿方式進行項目的分離,實作更好的重用操作,特别WCF需要考慮多種寄宿方式的情況下。下面是WCF服務庫和WCF服務應用程式的介紹說明,先了解一下基礎。

WCF服務庫,可以認為是一個包含WCF服務以及契約定義的類庫。這裡WCF服務庫還不能直接運作,你可以在其他項目裡引用,在宿主裡啟用托管這個庫。

而WCF應用程式,是一個可以執行的程式,它有獨立的程序,WCF服務類契約的定義,可以直接看到運作的效果。此項目模闆應該是基于IIS托管的程式。

前者一般考慮WCF服務設計的時候,服務類的定義為單獨的庫,可以為其它項目使用。提高代碼的複用性。後者在開發基于IIS托管的WCF服務程式時,比較多見,自學的時候也可以使用這種類型。當然你也可以修改這些代碼,比如把WCF服務程式裡的類,移到一個單獨的類庫裡。

建立WCF服務庫,可以了解為我們開發.NET程式時建立的一個類庫子產品,不含界面,如下所示,建立一個WCF服務庫。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

确定後就隻有一個示例服務Service1生成了。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

這裡,我們為了示範,就不修改任何它們的代碼,原始的代碼如下所示。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務
微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

這種也是一種常見的WCF服務寄宿方式,通過啟動一個類似DOS視窗的控制台軟體,實作WCF服務的動态寄宿,關閉控制台程式,服務就自然終止。

這種方式很簡單,建立一個控制台程式,然後添加WCF服務類庫的項目應用,在Main函數裡面添加下面代碼即可實作。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務
微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務
微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

和控制台程式一樣,我們建立一個Winform項目,然後在窗體啟動代碼裡面添加寄宿方式的代碼即可,為了較好的響應體驗,可以使用背景線程程式進行服務啟動,如下所示。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務
微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

當然為了防止Winform程式被不小心關閉,可以添加托盤代碼,把程式縮小到托盤圖示裡面。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

這種方式的服務寄宿,和IIS一樣有一個一樣的優點,系統啟動後,WCF服務也會跟着啟動了,不用人工幹預,也是一種較好的寄宿方式。

為了實作這種方式的寄宿,我們建立一個控制台程式,然後添加響應的Window服務和安裝程式類

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

然後在服務類啟動裡面添加WCF的寄宿代碼,如下所示。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務
微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

為了實作通過該控制台程式實作參數化安裝和解除安裝服務,我們需要攔截控制台的參數,并進行相應的操作,如下所示。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務
微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

編譯程式成功後,我們添加兩個批處理的DOS腳本來實作執行程式的自動安裝和解除安裝,如下所示。

安裝腳本

解除安裝腳本

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

順利執行腳本後,服務清單裡面就增加一個服務項目了。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

解除安裝操作,直接執行腳本就會解除安裝服務,非常友善哦。

當然,除了以上幾種方式,這種以WCF服務庫的方式,也可以在Web方式進行寄宿(IIS方式),這種方式更簡單,添加一個字尾名的svc的檔案,隻需要一行代碼即可,如下所示。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

有時候,我們為了需要,可能通過一個小程式釋出一個服務,然後供其他程式進行調用,可能是Web,也可以是Winform,但是我們是想提供一個基于HTTP,GET或者POST方式來實作接口的調用的,例如,提供一個JSON格式或者文本格式的内容傳回操作。

如果是整合在Winform裡面,那麼我們在Winform裡面添加一個WCF的項,修改裡面的代碼就可以了,如下所示。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

首先要在使用GET方式的WCF服務接口的添加說明。如果是POS方式,增加設定有點不同([WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)])。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務
微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

第二,在實作類裡面添加相應的設定

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務
微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

配置檔案如下所示,顔色标注特别的要注意:

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務
微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

運作Winform程式,啟動了WCF服務後,我們可以在浏覽器(Chrome)上進行操作,如下結果所示。

微軟 WCF的幾種寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服務

從上圖我們可以看到,這個通過Winform啟動起來的WCF服務,連接配接也能通過GET方式進行接口調用了,接口可以通過參數進行傳遞,對于一些友善傳輸資料的接口如JSON接口,就是一種非常友善的調用了。