WCF系列教程之WCF服務宿主
本文參考自http://www.cnblogs.com/wangweimutou/p/4377062.html,純屬讀書筆記,加深記憶。
一、簡介
任何一個程序的運行都需要依賴一個確定的進程中,WCF也不例外。如果我們需要使用WCF服務,那麽我們就必須將服務寄宿與創建它並控制它的上下文和生存期的運行時環境當中,承載服務的環境,稱之為宿主。WCF服務可以在支持托管代碼的任意Windows進程中運行。WCF提供了統一編程模型,用於生成面向服務的應用程序。此編程模型保持一致且獨立於部署服務的運行時環境。 實際上,這意味著不管使用什麽宿主選項,服務的代碼看起來都非常類似。
所以,WCF服務的宿主選項可以有多種選項:
(1)、控制臺應用程序
(2)、服務器環境,如 Internet 信息服務 (IIS)
(3)、Windows 進程激活服務 (WAS) 管理的工作進程內運行的
(4)、Windows 服務
.
.
.
等等
開發人員可以選擇滿足服務部署要求的宿主環境。 這些要求可能源自部署應用程序的平臺,它必須發送和接收消息的傳輸,或者進程回收的類型和為確保足夠可用性所需的其他進程管理,或者某些其他管理或可靠性要求。
二、WCF宿主環境主要有以下幾種
1、托管應用程序中的自承載
WCF服務可以承載與任何托管應用程序中,這是最靈活的選項,因為它需要部署的基礎結構最少,在托管應用程序代碼內嵌入服務代碼,然後創建並打開 ServiceHost 的實例以使服務變為可用。
這種方式的方案主要有兩個:
(1)、控制臺應用程序
(2)、客戶端應用程序
i、 Windows Presentation Foundation (WPF)
ii、 Windows 窗體 (WinForms) 應用程序
控制臺的優勢:
在應用程序的開發階段中,將 WCF 服務承載於控制臺應用程序內通常是很有用的。 這使服務變得容易調試,從中跟蹤信息以查明應用程序內發生的情況變得更加方便,以及通過將其復制到新的位置進行來回移動變得更加輕松。
客戶端應用程序的優勢:
此宿主選項還使客戶端應用程序(如 WPF 和 WinForms 應用程序)與外部世界的通信變得很容易。 例如,一個將 WPF 用於其用戶界面並作為 WCF 服務主機的對等協作客戶端,允許其他客戶端連接到它並共享信息。
2、托管應用程序中的自承載代碼實例
(1)、控制臺應用程序代碼實例
請參考WCF系列教程之WCF消息交換模式之單項模式
(2)、關於Windows Presentation Foundation (WPF)和Windows 窗體 (WinForms) 應用程序的代碼實例,因為本人不常用這兩種技術開發,所以不多做解釋
3、托管Windows服務
此宿主選項註冊WCF服務作為托管Windows服務(以前成為NT服務),承載與其中的應用程序域中,以便服務的進程生存期由 Windows 服務的服務控制管理器 (SCM) 控制。與自承載選項一樣,此類型的宿主環境要求作為應用程序的一部分編寫某些宿主代碼。 通過使服務從 ServiceBase 類以及從 WCF 服務協定接口繼承,將該服務同時實現為 Windows 服務和 WCF 服務。 然後創建 ServiceHost,在被重寫的 OnStart(String[]) 方法內打開它並在被重寫的 OnStop() 方法內關閉它。 還必須實現從 Installer 繼承的安裝程序類,以允許 Installutil.exe 工具將程序安裝為 Windows 服務。在未激活消息的安全環境中,由托管 Windows 服務宿主選項啟用的方案是承載於 IIS 之外、長時間運行的 WCF 服務的方案。 服務的生存期改由操作系統控制。 此宿主選項在 Windows 的所有版本中都是可用的。
3.1、Windows服務(以前成為NT服務)的優點:
(1)、承載在IIS外、長時間運行的WCF服務
(2)、受所有windows版本的支持
(3)、由操作系統控制控制服務進程的生存期
3.2、Windows服務(以前成為NT服務)支持的傳輸
(1)、HTTP
(2)、net.tcp
(3)、net.pipe
(4)、net.msmq
3.3、進程和AppDomain回收
不會被回收,除非手動關閉服務
4、托管Windows服務代碼示例
5、Internet信息服務(IIS)
WCF系列教程之WCF服務宿主