託管服務

如果要成為作用中的服務,必須將服務裝載在建立及控制其內容和存留時間的執行階段環境中。 Windows Communication Foundation (WCF) 服務是設計為在支援 Managed 程式碼的 Windows 處理序中執行的。

WCF 為服務導向應用程式的建置提供了統一的程式設計模型。 這個程式設計模型會維持一致並與部署服務的執行階段環境互相獨立。 實務上,這意味著不管裝載選項為何,服務的程式碼看起來都差不多。

這些裝載選項的範圍從在主控台應用程式中執行到伺服器環境 (例如,在由網際網路資訊服務 (IIS) 或 Windows Process Activation Service (WAS) 管理的背景工作處理序中執行的 Windows 服務) 不一而足。 開發人員可選擇滿足服務部署需求的裝載環境。 這些需求可能源自部署了應用程式的平台、應用程式必須賴以傳送與接收訊息的傳輸,或是用來確保足夠可用性所需的處理序回收類型與其他處理序管理,或是其他一些管理或可靠性需求。 下節將提供有關裝載選項的資訊與指引。

託管選項

在受控應用程式中自我裝載

WCF 服務可以裝載於任何 Managed 應用程式。 這是最彈性的選項,因為它只需要最少的基礎結構就可部署。 您可以將服務的程式碼嵌入 Managed 應用程式程式碼中,然後建立並開啟 ServiceHost 的執行個體以便提供服務。 如需更多資訊,請參閱如何:在受控應用程式中裝載 WCF 服務

此選項可啟用兩個常見的案例:在主控台應用程式與豐富型用戶端應用程式 (例如,以 Windows Presentation Foundation (WPF) 或 Windows Forms (WinForms) 為基礎的應用程式) 中執行的 WCF 服務。 在應用程式開發階段,於主控台應用程式中裝載 WCF 服務一般來說是很有用的方式。 這樣一來,您可以很容易地進行偵錯、取得追蹤資訊以便了解應用程式裡面所發生的事,以及藉由將它們複製到新的位置輕易地加以移動。 這個裝載選項同時可讓豐富型用戶端應用程式 (例如:WPF 和 WinForms 應用程式) 更容易與外界通訊。 例如,使用 WPF 做為使用者介面,並同時裝載 WCF 服務以允許其他用戶端與其連線並共用資訊的對等共同作業用戶端。

Managed Windows 服務

這個裝載選項包含可將 WCF 服務裝載為 Managed Windows 服務 (之前稱為 NT 服務) 的註冊應用程式定義域 (AppDomain),如此一來便可透過 Windows 服務的服務控制管理員 (SCM) 來控制服務的處理序存留期。 就像自我裝載選項一樣,此類型的裝載環境要求將某些裝載程式碼撰寫成應用程式的一部分。 此服務可同時實作為 Windows 服務以及 WCF 服務,方法是讓它繼承 ServiceBase 類別以及 WCF 服務合約介面。 ServiceHost 接著會透過覆寫的 OnStart(String[]) 方法來建立並開啟,並透過覆寫的 OnStop() 方法加以關閉。 繼承自 Installer 的安裝程式類別必須同時實作,以允許藉由 Installutil.exe 工具將程式安裝為 Windows 服務。 如需更多資訊,請參閱如何:在受控 Windows 服務中裝載 WCF 服務。 Managed Windows 服務裝載選項所啟用的案例,就是在非訊息啟動的安全環境中由 IIS 外部所裝載的長期執行之 WCF 服務案例。 服務的存留期會改由作業系統來控制。 所有 Windows 版本都提供這個裝載選項。

Internet Information Services (IIS)

IIS 裝載選項會與 ASP.NET 整合並使用這些技術所提供的功能,例如處理序回收、閒置關機、處理序健康狀態監控,以及訊息啟動。 在 Windows XP 與 Windows Server 2003 作業系統中,建議您採用這個解決方案來裝載必須具備高度可用性與高度擴充性的 Web 服務應用程式。 IIS 同時提供整合式管理功能,而這也是客戶希望從企業級伺服器產品中所得到的功能。 這個裝載選項要求必須正確設定 IIS,但不要求您將任何裝載程式碼撰寫為應用程式的一部分。 如需如何為 WCF 服務設定 IIS 裝載的詳細資訊,請參閱如何:在 IIS 中裝載 WCF 服務

IIS 裝載的服務只能使用 HTTP 傳輸。 它在 IIS 5.1 版的實作方式已經為 Windows XP 帶來一些限制。 在 Windows XP 中,IIS 5.1 為 WCF 服務所提供的訊息啟用會封鎖相同電腦上其他所有自我裝載的 WCF 服務,不讓這些服務使用連接埠 80 來進行通訊。 在 Windows Server 2003 中,當 WCF 服務透過 IIS 6.0 來裝載時,可以在與其他應用程式相同的 AppDomain/應用程式集區/背景工作處理序中執行。 但是由於 WCF 和 IIS 6.0 都採用核心模式 HTTP 堆疊 (HTTP.sys),因此 IIS 6.0 可與其他在相同電腦上執行的自我裝載 WCF 服務共用連接埠 80 (如果是 IIS 5.1 就不能這麼做)。

Windows Process Activation Service (WAS)

Windows Process Activation Service (WAS) 是 Windows Server 2008 上全新的處理序啟動機制 (Windows Vista 也提供此機制)。 WAS 保留熟悉的 IIS 6.0 處理模型 (應用程式集區和訊息型處理程序啟用) 及主控功能 (例如快速失敗防護、健康監視及回收),但是它會從啟用結構中移除 HTTP 依存性。 IIS 7.0 使用 WAS 透過 HTTP 來完成訊息啟動。 其他 WCF 元件也可外掛至 WAS 以提供 WCF 所支援的其他通訊協定 (例如 TCP、MSMQ,與具名管道) 上的訊息啟動。 如此便可讓使用通訊協定的應用程式使用 IIS 功能,例如處理序回收、快速故障防護,以及只提供給以 HTTP 為基礎的應用程式使用的常見組態系統等。

這個裝載選項要求必須正確設定 WAS,但不要求您將任何裝載程式碼撰寫為應用程式的一部分。 如需如何設定 WAS 裝載的詳細資訊,請參閱如何:在 WAS 中裝載 WCF 服務

選擇裝載環境

下表將摘要說明一些與各個裝載選項相關的主要優點與案例。

裝載環境 常見案例 主要優點與限制
Managed 應用程式 (「自我裝載」) - 在開發期間使用的主控台應用程式。
- 存取服務的豐富型 WinForm 和 WPF 用戶端應用程式。
- 彈性。
- 容易部署。
- 不是服務的企業級解決方案。
Windows 服務 (之前稱為 NT 服務) - 在 IIS 外部裝載且長期執行的 WCF 服務。 - 由作業系統控制 (而非由訊息啟動) 的服務處理序存留期。
- 所有版本的 Windows 皆支援。
- 安全環境。
IIS 5.1、IIS 6.0 - 透過 HTTP 通訊協定,並存執行 WCF 服務與網際網路上的 ASP.NET 內容。 - 處理序回收。
- 閒置關機。
- 處理序健康狀態監控。
- 訊息啟動。
- 僅限 HTTP。
Windows Process Activation Service (WAS) - 當網際網路上未安裝 IIS 時,透過各種不同的傳輸通訊協定來執行 WCF 服務。 - 不需要 IIS。
- 處理序回收。
- 閒置關機。
- 處理序健康狀態監控。
- 訊息啟動。
- 可與 HTTP、TCP、具名管道,和 MSMQ 一起運作。
IIS 7.0 - 使用 ASP.NET 內容來執行 WCF 服務。
- 透過各種不同的傳輸通訊協定在網際網路上執行 WCF 服務。
- WAS 優點。
- 與 ASP.NET 和 IIS 內容整合。

裝載環境的選擇取決於用來部署該環境的 Windows 版本、用來傳送訊息所需的傳輸,以及所需的處理序類型和應用程式定義域回收。 下表摘要說明與這些需求相關的資料。

裝載環境 平台可用性 支援的傳輸 處理序和 AppDomain 回收
Managed 應用程式 (「自我裝載」) Windows XP、Windows Server 2003、Windows Vista、

Windows Server 2008
HTTP、

net.tcp、

net.pipe、

net.msmq
No
Windows 服務 (之前稱為 NT 服務) Windows XP、Windows Server 2003、Windows Vista、

Windows Server 2008
HTTP、

net.tcp、

net.pipe、

net.msmq
No
IIS 5.1 Windows XP HTTP Yes
IIS 6.0 Windows Server 2003 HTTP Yes
Windows Process Activation Service (WAS) Windows Vista、Windows Server 2008 HTTP、

net.tcp、

net.pipe、

net.msmq
Yes

從未受信任的主機執行服務或任何延伸項目都會破壞安全性,這點請您務必注意。 此外,當您開啟模擬下的 ServiceHost 時,應用程式必須確定使用者尚未登出,例如,藉由快取使用者的 WindowsIdentity 來判斷。

另請參閱