第227期 / September 5, 2016

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

簡談Windows Communication Foundation

作者/蔡秉翰

[發表日期:2016/9/5]

何謂Windows Communication Foundation

Windows Communication Foundation(WCF)是由微軟發展的通訊應用程式開發介面,用於建置服務導向應用程式的架構,於.NET Framework 3.0 開始發展,與Windows Presentation Foundation 及 Windows Workflow Foundation 並列為重要開發項目,使用WCF可以在各個服務端點之間傳送非同步資料,服務端點可能是IIS、WAS或是應用程式端裝載的服務項目,端點則是用戶端用來向服務端點發出請求的項目,它會像服務端點請求資料,可能為XML的資料格式或是位元組的資料串流,WCF的優點為此技術讓開發者有良好的管理方式管理服務端與用戶端,在 .NET Framework 2.0及之前的版本中,微軟開發了Web Service(SOAP with HTTP communication),.NET Remoting(TCP/HTTP/Pipeline communition)以及基本的Winsock通訊,但是過多的通訊方法使得開發人員在開發上會遇到困難,因為每種通訊方法不同使得開發人員必須學習各種通訊方法,不同通訊方法之間也會有部分的重疊,這些缺點大大增加了開發的速度,所以微軟才發展了WCF通訊方法統一各種不同通訊架構,降低了開發人員開發上的不便。

Windows Communication Foundation的基本概念與架構

WCF是以訊息通訊的概念為基礎,訊息會在端點(Endpoint)間傳送,端點是傳送或接收訊息的位置,每一個端點必須存在一個IP位址,指定此端點設定溝通資訊的繫結,端點會以標準方式描述傳送訊息的位置、如何傳送訊息以及訊息的顯示方式,服務可以將這些資訊向用戶端公開,而用戶端也會產生一個相對應的端點,另外WCF也支援了多種傳訊模式,包含基本的要求-回應,單向與雙工通訊,而WCF架構包含了合約和描述、服務執行階段、訊息、裝載和啟動,以下將會分別介紹:

一、合約及描述

合約(Contract)會定義各方面的訊息,資料合約會描述服務所能使用的每個參數或是方法,這些訊息參數是由XML結構描述定義語言所定義的,因此任何可解譯XML語言的系統都能接收,合約必須以介面(Interface)的方式呈現,而實際的程式碼由介面衍生出來並實作,合約分成了以下幾種:

  • 服務合約(service contracts): 描述WCF提供哪些功能,並產生相對應的WSDL。


  • 資料合約(data contracts):描述WCF服務與用戶端溝通時所需傳遞的資料型別與資料結構,這些複雜的資料結構透過網路傳送時將被序列化。


  • 訊息合約(message contracts): 描述完整的SOAP格式,它可以使用Data Contracts即可序列化型別來發佈複雜型別的架構,另外Message Contracts提供了一個簡單的方式在接收或發送訊息時客製化SOAP表頭。


  • 錯誤合約(Fault Contracts): 提供Fault物件回報錯誤,開發者可以用Try...Catch攔截錯誤訊息,其實在定義錯誤合約時,就是用資料合約的方式描述Exception。以下為合約(Contract)程式碼範例:



    另外WCF中除了合約定義雙方的溝通方式外,雙方的通訊方法由繫結(Binding)所定義,通訊間的安全性由雙方約定的安全性層次訂定。WCF支援了傳輸層安全性(Transport-level security)及訊息層安全性(Message-level security)兩種,傳輸層安全性是在資料傳輸時進行加密,例如SSL,而訊息層安全性是在資料處理時就進行加密,例如雜湊或是一些金鑰加密演算法等。另外WCF也支援了多種協定,例如:HTTP、TCP、MSMQ、Name Pipe,所以為了要統一這些通訊協定,在編碼及格式上必須定義一些規範,而開發者必須依照此規範設定繫結內容,以下為設定通訊協定Binding的範例:



  • 二、服務執行階段

    稱為服務執行時的行為,結流控制可設定伺服器端要處理多少用戶端發送之請求,錯誤行為可指定若攔截到錯誤訊息時應採取何種措施,例如用戶端惡意發送大量請求企圖癱瘓伺服器端時,程式須如何因應,執行個體可以指定服務執行的個體數量,程式也可擴充自己所需之功能。

    三、訊息

    訊息由通道(Channel)組成,通道會在訊息間運作,通道有兩種,傳輸通道與通訊協定通道,傳輸通道是經由網路讀取或是寫入訊息,網路是使用位元組串流進行傳遞,所以有些傳輸方式會用編碼器將訊息轉換為位元組串流格式,例如XML與二進位編碼。通訊協定通道則是會實作傳遞訊息的通訊協定,例如WS-Security與WS-Reliability,像是HTTP通道會指定傳遞訊息須使用HTTP通訊協定,TCP通道會指定傳遞訊息時的通訊協定為TCP,MSMQ通道會啟用與MSMQ統到程式互通。

    四、裝載和啟動

    程式的最終目的就是要執行,但WCF必須裝載於IIS或是Windows Activation Service(WAS)等載體上執行,並不能直接執行, IIS或是WAS能讓WCF程式部屬到載體上時能自動啟動,而服務必須在可執行檔中執行也稱為自我裝載(Self-Hosted)服務。

    參考資料

    1.https://zh.wikipedia.org/zh-hant/Windows_Communication_Foundation

    2.https://msdn.microsoft.com/zh-tw/library/ms731079%28v=vs.110%29.aspx

    3.https://msdn.microsoft.com/zh-tw/library/ms733128%28v=vs.110%29.aspx

    4.http://huan-lin.blogspot.com/2009/02/wcf-concept-map.html