【第170期 November 5, 2011】
 

研發新視界

論Windows Communication Foundation

作者/史印辰

[發表日期:2011/11/5]


何謂 Windows Communication Foundation

Windows Communication Foundation (WCF) 是用於建置服務導向應用程式的架構,是微軟由原本的COM,COM+, Web Service and Remoting…等分散式技術中整合而成的一個新一代的分散式技術。WCF是.NET Framework 3.0三個重要的技術之一,它提供訊息安全性、支援交易、服務描述、服務版本管理等功能,透過一些設定讓訊息通訊的實作可以簡化。

使用 WCF可以在各個服務端點之間傳送非同步訊息形式的資料。 服務端點可能是由 IIS 裝載的持續上線服務的一部分,或為應用程式中裝載的服務。 端點則大致是某項服務的用戶端,會向該服務端點要求資料。 訊息可為簡單的單一字元或以 XML 傳送的字組,乃至像二進位資料的資料流這般複雜的形式都沒問題。

WCF架構圖


《圖一》


WCF 技術的核心概念

一、端點(endpoint):

endpoint 是 服務開放出來給外部程式存取的介面,每一個endpoint必須存在一個IP address,指定這個endpoint、設定溝通資訊的binding及WCF service所支援含service contract的method。

二、網路位置(address):

位址會指定接收訊息的位置,可指定做為統一資源識別元 (URI)。URI 結構描述部分會指定用來到達位址的傳輸機制,例如 HTTP 和 TCP。URI 的階層式部分包含唯一位置,其格式取決於傳輸機制。

三、連結(binding):

用來指明client如何連接WCF service的端點,而每一個端點都必須關聯到一個binding物件。一個binding物件包含下列三種資訊: 通訊協定的資訊,例如:被使用的安全機制、可靠的訊息及交易的設定。在運送協定下層的資訊,例如:TCP或HTTP。訊息編碼的資訊,例如:Text或XML、Binary,或Message Transmission Optimization Mechanism(MTOM)。

四、合約(contract):

定義這個服務能做些什麼。WCF的基本概念是以合約(contract)來定義雙方溝通的協定,合約必須要以介面的方式來呈現,而實際的服務程式碼必須要由這些合約介面衍生並且實作。合約分成了五種:

  • Data Contract: 定義當WCF Service Operations哪些複雜的型別透過網路傳送需要被序列化。
    [DataContract]
    public class SomeType
    {
    [DataMember]
    public int ID;
    }

  • Service Contract: 定義一個服務所提供的功能,並產生相對應的WSDL。Service Contracts被實作成.NET Framework的interface且在interface上需加上ServiceContract的屬性宣告。
    [ServiceContract]
    public interface IMyContract {…}

  • Operation Contract: 定義一個服務所提供某一個獨立的功能,並產生相對應的WSDL。Operations Contracts被定義成在一個Service Contract Interface中新增的一個method且在method上需加上OperatioContract的屬性宣告。
    [OperationContract]
    void SomeOperation();

  • Message Contract: Message Contracts用來描述完整的SOAP格式。它們可以使用Data Contracts及可序列化的型別來發佈複雜型別的schema,若使用簡單型別,甚至可以明確的控制SOAP訊息表頭及內容。Message Contracts提供一個簡單的方式可在接收或送出訊息時客製化SOAP表頭。
    [MessageContract]
    public class MyRequest
    {
    [MessageHeader]
    public string field1;

    [MessageBody]
    public string field2;
    }

  • Fault contract: 一個WCF Service使用Fault物件回報錯誤。Fault Contracts為WCF程式碼的錯誤產生文件,而且WCF使用Fault物件對應SOAP失敗。
    [OperationContract]
    [FaultContract(typeof(DivideByZeroException)]

    throw new FaultException (someException);
五、Hosting (裝載):

WCF 程式沒辦法直接執行,需要有「載體」裝載,於「載體」上執行,hosting 的方式主要有三種: IIS hosting、self-hosting和WAS hosting。

使用WCF建置系統的情況

以應用程式的角度來看,使用WCF的clients及services。典型的情境包含Client-Server,Business-To-Business(B2B),Business-To-Consumer(B2C),Smart Client To Web Service及The WCF Peer Channel。

以互通的角度來看,WCF Service可以與其它平台和技術互通。典型的情境包含對Web Services,對Java EE 應用程式及其它的訊息服務。

以訊息的角度來看,WCF為內部處理通訊(Interprocess communication - IPC)與Server-based應用程式,提供強大的處理機制。訊息服務的情境包含發佈-訂閱(publisher-subscriber)及轉發(router)。

以基礎架構的角度來看,WCF提供建立基礎架構(infrastructure)元件的能力,例如:Security Token Service(STS),它可以提供不同平台應用程式有Single-SignOn的能力。WCF為了統一的安全性提供out of box的支援,可以結合不同的系統、網路及不同信任網域的組織。

參考資料

http://zh.wikipedia.org/zh-hant/Windows_Communication_Foundation
http://dotnetframework.blogspot.com/search/label/Windows%20Communication%20Service%28WCF%29
http://sites.google.com/site/stevenattw/dot-net/wcf/wcf-essentials
http://msdn.microsoft.com/zh-tw/library/ms731190(v=VS.90).aspx