Web 服務包括應用程式對應用程式通訊的標準通訊協定,不僅廣為接受,更改變了軟體的發展。例如,Web 服務現在提供的功能包括安全性、分散式交易協調和可靠的通訊。Web 服務改變所帶來的優勢應反映在開發人員使用的工具和技術。Windows Communication Foundation (WCF) 是針對為分散式運算、廣泛的互通性和直接的服務導向支援提供可管理的方法而設計。
WCF 透過全新的服務導向程式設計模型,簡化所連接應用程式的開發。WCF 以提供分層架構的方式支援分散式應用程式開發的多種樣式。WCF 通道架構在其基底上提供非同步、無類型的訊息傳遞基本。建置在此基底最上方的通訊協定設備可用來進行安全、可靠、交易的資料交換,也可選用多個傳輸與編碼選項的通訊協定機能。
具有類型的程式設計模型 (稱為「 服務模型」(Service Model)) 是針對簡化分散式應用程式的開發而設計,並提供 ASP.NET Web 服務、.NET Framework 遠端處理和企業服務中的專業知識給開發人員,以及以類似的開發經驗跨入 WCF 領域的人員。服務模型具有直接對應 Web 服務與 .NET Framework Common Language Runtime (CLR) 的概念的功能,包括將訊息彈性且延伸對應至 Visual C# 或 Visual Basic 等語言中的服務實作。它提供了啟用鬆散結合與版本控制的序列化設備,可與現有 .NET Framework 分散式系統技術 (例如 Message Queuing (MSMQ)、COM+、ASP.NET Web 服務、Web 服務加強 (WSE) 和其他多種功能等) 整合且互通。
問題範例
以下範例說明 WCF 能解決的部分問題。租車公司決定建立用於預約車輛的新應用程式。此預約租車應用程式的建立者知道該應用程式實作的商務邏輯必須可由在公司內部與外部執行的其他軟體存取。因此,他們決定以服務導向的樣式加以建置,並透過一組定義良好的服務,對其他軟體公開應用程式的邏輯。為了要實作這些服務,並藉此與其他軟體通訊,新的應用程式將使用 WCF。
![]()
在其整個存留期中,可能會有很多其他應用程式存取預約租車應用程式。設計時,預約租車應用程式的設計人員知道該應用程式的商務邏輯將由先前所示的三種其他軟體存取:
- 供企業的客服中心員工使用,且在 Windows 桌上型電腦上執行的客服中心應用程式。此應用程式是針對新的預約系統所建立,並使用 Microsoft .NET Framework 和 WCF 建置。此應用程式與新的預約租車應用程式並非完全不同,因為其唯一的目的是做為新系統的用戶端。從服務導向的觀點來看,它只是預約系統的商務邏輯的另一個用戶端。
- 現有的預約應用程式建置在執行於非 Windows 系統中的 J2EE 伺服器上。由於最近購併了其他租車公司,因此現有系統必須能存取新的應用程式邏輯,以便提供統一的體驗給所購併公司的客戶。
- 合作夥伴應用程式在多個平台上執行,每個平台都位於與租車公司有商務往來的公司內。合作夥伴可能包括旅行社、航空公司,以及其他有預約租車需求的公司。
新預約租車應用程式的各種通訊需求一點也不簡單。例如,對於與客服中心互動的應用程式來說,效能十分重要,而互通性應明確易懂,因為兩者都建置在 .NET Framework 上。但對於和現有 J2EE 型預約應用程式與各種合作夥伴應用程式的通訊而言,互通性則是最高目標。安全性規定也大不相同,會隨著本機的 Windows 應用程式、在其他作業系統上執行的 J2EE 型應用程式和網際網路上的多種合作夥伴應用程式而改變。即使是交易式需求也可能僅隨著允許提出交易式要求的內部應用程式而改變。如何在不對無法管理的複雜性公開新應用程式建立者的情況下,滿足這些多樣化的商務與技術需求?
WCF 是針對此多樣化但真實的案例所設計,而且是公開和存取服務的 Windows 應用程式的預設技術。本主題介紹 WCF,檢查它所提供項目並顯示如何使用。透過此簡介,剛描述的案例將做為範例。如此做的目的是為了釐清 WCF 是什麼,顯示它解決的問題,並說明它如何解決那些問題。
處理問題
新的 Windows 應用程式的基礎是 .NET Framework。因此,WCF 主要會做為一組類別,實作在 .NET Framework CLR 最上方。由於它會擴充其類似環境,因此 WCF 讓使用 .NET Framework 建立服務導向應用程式的開發人員也能以類似方式建置服務導向應用程式。
![]()
圖示顯示 WCF 用戶端和服務的畫面。這兩個項目使用以 WCF 原生訊息表示的 SOAP 進行互動,所以即使圖示顯示雙方都建置在 WCF 上,它並不是必要的項目。WCF 建置在 .NET Framework 2.0 上。
如之前的建議所述,WCF 會處理通訊應用程式的各類型挑戰。但是,以下為 WCF 最重要的三個方面:
- 整合現有的 .NET Framework 通訊技術。
- 支援跨銷售商的互通性,包括可靠性、安全性和交易。
- 明確的服務導向。
整合 Microsoft 分散式運算技術
由於缺少 WCF,實作租車應用程式的開發團隊必須由 .NET Framework 提供的多種選擇中選擇正確的分散式技術。但由於此應用程式有多種需求,沒有單一技術可以符合其需求。此外,應用程式可能使用多種現有 .NET Framework 技術,如下所示:
- ASP.NET Web 服務 (ASMX):與現有的 J2EE 預約應用程式及合作夥伴應用程式透過網際網路通訊的選項。由於現在大部分平台都支援基本的 Web 服務,因此這是在發行 WCF 之前達到跨廠商互動性的最直接方式。
- .NET Framework 遠端處理:與客服中心應用程式通訊的選項,因為這兩者都建置在 .NET Framework 上。遠端處理是明確針對緊密結合的 .NET 對 .NET 通訊所設計,因此它可對本機網路中的應用程式提供流暢且直接的開發體驗。
- 企業服務:由預約租車應用程式用於管理物件存留期和定義分散式交易。在此案例中,這些功能可用來與其他應用程式通訊和整合,但企業服務僅支援有限的通訊選項。
- WSE:可以搭配 ASMX 使用,以便和 J2EE 預約應用程式與合作夥伴應用程式進行通訊。由於 WSE 實作最新定義的 Web 服務協定 (統稱為 WS-* 規格),因此它允許更具彈性的 Web 服務安全性,只要所有相關應用程式支援這些新規格的相容版本即可。
- Microsoft Message Queuing (MSMQ):用來與需要保證資料傳道與取消結合工作負載與應用程式存留期的 Windows 合作夥伴應用程式進行通訊。訊息佇列提供的永久性訊息通常是間歇連線應用程式的最佳解決方案。
建置在 .NET Framework 上的預約租車應用程式必須使用這些通訊技術的其中多項技術,以符合需求。雖然這在技術上可行,但最後的應用在實作上會很複雜,而且在維護上是一大挑戰。
透過 WCF,方案的實作可望大幅簡化。如圖所示,WCF 可用於之前描述的所有情況。因此,預約租車應用程式可以將此項技術應用在該應用程式內所有應用程式對應用程式的通訊中。以下顯示 WCF 如何滿足這些需求:
- 由於 WCF 可以使用 Web 服務通訊,因此可與其他支援 SOAP 的平台 (例如領導性 J2EE 型應用程式伺服器) 直接互通。
- 您也可以設定和擴充 WCF,以便使用不以 SOAP 為基礎 (例如 RSS 的簡易 XML 格式) 的訊息和 Web 服務通訊。
- 效能是大多數企業的最大考量。WCF 的開發目標,便是要成為 Microsoft 所開發的分散式應用程式平台中,最快速的分散式應用程式平台。如需有關 WCF 和其他 Microsoft .NET 分散式通訊技術之間的高階效能比較資訊,請參閱
http://go.microsoft.com/fwlink/?LinkId=94274 (本頁面可能為英文)。
- 當通訊中的雙方都建置在 WCF 上時,為了要提供最佳效能,使用於此類情況的 Wire 編碼會是 XML 資訊集的最佳二進位版本。訊息仍會符合 SOAP 訊息的資料結構,但它們的編碼會使用二位元的資料結構,而非 XML 1.0 文字編碼的標準角括弧和文字格式。使用此選項與客服中心用戶端應用程式通訊十分合理,因為它也建置在 WCF 上,而且效能也是一個重要的考量。
- 管理物件存留期、定義分散式交易和企業服務的其他方面現在由 WCF 提供。它們可以供任何 WCF 應用程式使用,這表示預約租車應用程式可以使用它們搭配與其通訊的任一個其他應用程式。
- 由於它支援一組大型的 WS-* 規格,因此在與其他支援這些規格的任何平台通訊時,WCF 可協助提供可靠性、安全性和交易。
- 用於佇列訊息的 WCF 選項建置在訊息佇列上,允許應用程式在不使用另一組應用程式程式設計介面的情況下使用持續性佇列。
這項整合帶來了更佳的功能,並大幅降低了複雜性。
與使用其他技術建置的應用程式的互通性
WCF 為分散式應用程式推出了新開發環境,在設計上可與非 WCF 應用程式之間具有良好的交互操作能力。WCF 在互通性上有兩大重點:與其他平台的互通性,以及與早於 WCF 的 Microsoft 技術之互通性。下列章節會分別說明這兩方面。
與其他 Web 服務平台的互通性
現今企業所擁有的系統和應用程式通常是向多家不同供應商購買而來。舉例來說,在租車應用程式中,便需要與使用不同語言撰寫,並在不同作業系統上執行的各種軟體應用程式進行通訊。
由於 WCF 的基本通訊機制是以 SOAP 為基礎的 Web 服務,因此以 WCF 為基礎的應用程式可以與多種內容下執行的軟體進行通訊。建置在 WCF 上的應用程式可以與下列所有應用程式互動:
- 在相同 Windows 電腦上的不同處理序中執行的 WCF 應用程式。
- 在另一台 Windows 電腦上執行的 WCF 應用程式。
- 以支援標準 Web 服務的其他技術 (例如 J2EE 應用程式伺服器) 建置的應用程式。這些應用程式可以在執行 Windows 作業系統或其他作業系統的電腦上執行。
為了在基本通訊之外提供更多功能,WCF 實作由 WS-* 規格定義的 Web 服務技術。這些規格原本全都是由 Microsoft、IBM 和其他合作的廠商所定義。由於規格變得穩定,因此擁有權常會傳遞給標準組織,例如全球資訊網協會 (W3C) 或美國先進結構化資訊標準組織 (OASIS)。這些規格規範了眾多領域,包含基本訊息、安全性、可靠性、交易,以及與服務的中繼資料搭配使用。如需詳細資訊,請參閱 互通性與整合。如需 進階 Web 服務規格的詳細資訊,請參閱 (本頁面可能為英文)。
以功能區分群組,這些規格的涵蓋範圍包括:
- 訊息:SOAP 是 Web 服務的基礎,定義了包含標頭和內文部分的基本封套。WS-Addressing 定義了用來處理 SOAP 訊息的 SOAP 標頭增加部分,使 SOAP 可以攜帶定址資訊,不用依賴如 HTTP 等基本傳輸通訊協定。訊息傳輸最佳化機制 (MTOM) 會透過以 XML 二進位最佳化套件 (XOP) 規格為基礎的大量二進位資料內容,定義 SOAP 訊息的最佳化傳輸格式。
- 中繼資料:Web 服務描述語言 (WSDL) 針對指定服務與如何使用服務的各個方面定義了標準語言。WS-Policy 指定更多無法在 WSDL 中表示的服務行為動態方面,例如偏好的安全性選項。WS-MetadataExchange 允許用戶端使用 SOAP 直接要求與服務有關的描述資訊 (例如其 WSDL 和其原則)。
- 安全性:WS-Security、WS-SecureConversation、WS-Trust 和 WS-Federation 全都定義 SOAP 的增加部分,以提供驗證、資料完整性、資料保密性和其他安全功能。
- 可靠性:WS-Reliable 訊息定義允許可靠端對端通訊的 SOAP 標頭之增加部分,即使必須周遊一個或多個 Web 服務媒介。
- 交易:建置於 WS-Coordination 上的 WS-Atomic 交易允許在 Web 服務對話的內容中協調兩階段認可交易。
預約租車應用程式可能會使用這些先進技術中的多種技術。例如,透過 HTTP 以外的傳輸機制使用 SOAP 時,WS-Addressing 便顯得十分重要,而這往往是與.NET Framework客服中心用戶端應用程式通訊的情況。WCF 需要使用 WS-Policy 和 WS-Metadata Exchange 來確認正在與其通訊的系統是否也使用 WCF,並發現其他項目。可靠的通訊在大部分情況下都很重要,因此在此案例中,可能會使用 WS-Reliable 訊息來與其他多個應用程式互動。同樣的,您也可以使用 WS-Security 和相關說明保護與一或多個應用程式通訊的安全性,因為所有應用程式都需要一定程度的保護,以避免遭到未經授權的存取或訊息修改和攔截。對需要與預約租車系統進行交易整合的應用程式而言,WS-Atomic 交易十分重要。最後,在需要二進位資料 (例如用於車隊的例圖) 的最佳 Wire 格式時,便可使用 MTOM,而且兩邊的通訊都支援此選項。
關鍵在於 WCF 會實作具備跨平台安全性、可靠性、交易和其他服務的互通 Web 服務。若要提供最大輸送量,可大幅最佳化 WCF 對 WCF 通訊,但所有其他通訊則會使用標準 Web 服務通訊協定。實際上,單一應用程式可以對兩種用戶端公開其服務。
與 Microsoft 技術的互通性
很多 Microsoft 客戶已對 WCF 中的 .NET Framework 技術做出重大投資。保護這些投資是 WCF 設計人員的基本目標。安裝 WCF 不會破壞現有的技術,因此組織在使用時不需要變更現有的應用程式。WCF 提供明確的升級途徑,而且盡可能地與較早的技術交互操作。
例如,WCF 和 ASMX 都使用 SOAP,因此 WCF 應用程式可以直接和以 ASMX 建置的應用程式交互操作。現有的企業服務應用程式也可以包含於 WCF 介面中,使這些服務可以與建置在 WCF 上的應用程式交互操作。由於 WCF 中的持續性佇列需仰賴 MSMQ,因此 WCF 應用程式可以直接與使用原始 MSMQ 介面建立但不屬於 WCF 應用程式者交互操作。在預約租車應用程式中,使用這些較早技術建立的軟體可以直接連線並使用新系統中的 WCF 服務。
但互通性並非永遠可行。例如,WSE 1.0 和 WSE 2.0 實作的其中一些 WS-* 規格和 WCF 相同,但這些較舊的技術實作較舊版本的規格。3.0 版的 WSE 允許與 WCF 互通性,但舊版本不允許。如需有關互動性的詳細資訊,請參閱 從 WSE 3.0 Web 服務移轉至 WCF。
與其他 XML 通訊協定的互通性
網際網路的未來是無法預測的,而現在使用的技術可能會有所演進或遭到取代。現在,在建立以 Web 為主的應用程式 (統稱為「Web 2.0」) 上有一個普遍的趨勢,就是以通訊為基礎的應用程式模型僅使用非 SOAP 型的簡易 XML 格式,並且需要仰賴 HTTP 做為傳輸和應用程式通訊協定。例如,代表性狀態傳輸 (REST) 架構樣式沒有用於處理資料的使用者定義操作觀念。反之,應用程式狀態會與 HTTP URL 和 HTTP 方法 (例如 PUT、POST、DELETE 和 GET) 關聯。這個方法跟在企業環境中建立多數開發人員熟悉的使用者定義程序或功能形成強烈對比。但 REST 方法在服務必須做為 Web 2.0 應用程式後端的案例中仍有其價值。
REST 只是 Web 2.0 技術演進的其中一個範例。在實驗性程式設計模型和標準不斷重新解譯與精進的環境中,需要以彈性因應無法預見的變化。WCF 彈性非常高。例如,當 WCF 使用 SOAP 做為基本結構時,它不一定會使用 SOAP 進行 Wire 通訊。事實上,WCF 可以設定為處理沒有 SOAP 封套包裝的「純文字」XML 資料。WCF 也可進行擴充,以支援特定的 XML 格式,例如 ATOM (一種常見的 RSS 標準),甚至還能支援非 XML 格式,例如 JavaScript 物件標記法 (JSON)。這種彈性可確保現在撰寫的程式碼在將來仍然有效,即使通訊協定已經改變或遭到取代。因此,WCF 是針對現在與未來的需要所設計。
請參閱