WCF後傳系列(8):深度通道編程模型Part 1—設計篇

來源:互聯網
上載者:User
引言

從本質上說,WCF是一個通訊服務架構,它允許我們使用不同的傳輸協議,使用不同的訊息編碼形式,跟不同的WS-*系列規範互動,而所有這些細節都是由通道堆棧來處理的。為了簡化這些處理,在WCF中提供了兩種模型,一是針對開發人員的應用程式編程模型;二是用來通訊的通道模型,這樣對於開發人員來說,只要瞭解應用程式編程模型就足夠了,而不會涉及到通道模型,然而,對於通道模型進行必要的學習,可以讓我們真正理解WCF中“通訊”概念,瞭解WCF的 整個架構體系,從而構建出更加健壯的WCF服務或者對WCF架構進行擴充。在本文中,我們將進行深度瞭解WCF中的通道模型是如何設計的。

通道模型概述

在WCF中,提供了一系列的介面和其它類型模型,它們為訊息的發送和接收提供了一個底層的編程模型,該模型稱之為WCF通道模型。在通道模型中,一個很重要的概念是通道堆棧,它是具有一個或多個訊息處理通道的分層的通訊堆棧,堆棧中放置了各種類型的通道,用來對象進行處理,如在通道堆棧的最底層放置了傳輸通道,它負責使通道堆棧適應基礎傳輸,1所示:

圖1

在通道堆棧中,不僅僅提供訊息的傳輸方式,還提供了其它諸如對訊息的內容或者訊息頭進行處理的功能,這些功能同樣是以通道的方式放置在通道堆棧中,甚至於我們可以編寫自己的通道,加入到通道堆棧中。

訊息在通道堆棧中傳輸時,將作為Message物件流程過通訊堆棧,如傳輸通道負責在發送方和接收方之間轉換訊息,之後訊息將通過傳輸通道繼續往上流,依次經過通道堆棧中的各個通道,這些通道各自負責提供一種通訊功能,如在訊息頭中添加資訊,對訊息的本文進行加密等等。

通道物件模型

通道物件模型是實現通道、通道接聽程式和通道處理站所必需的一組核心介面。還提供一些基類以輔助自訂實現。可以看到通道模型中最重要的有三組介面:通道、通道接聽程式和通道處理站。每個通道均實現一個或多個介面,稱為通道形狀介面或通道形狀;通道接聽程式負責偵聽傳入訊息,即在訊息的接收端,然後通過由通道接聽程式建立的通道將這些訊息傳送到上面的層;通道處理站負責建立通道用於發送訊息,即在訊息的發送方,並在通道處理站關閉時,關閉通道處理站建立的所有通道。

在通道模型中,最重要的一個介面是ICommunicationObject,它定義了所有通訊對象實現的基本狀態機器的核心介面,自訂通道通訊對象可以直接實現ICommunicationObject,2所示:

圖2

只有圖2中的這些介面,才屬於WCF的通道模型,在WCF中同樣提供了一些基類如CommunicationObject、ChannelFactoryBase等,在實現自訂的通道通訊對象時,也可以直接繼承於這些基類,但要注意,這些基類僅僅是為實現自訂通道通訊對象提供了方便,它們本身並不屬於通道模型的一部分。

ICommunicationObject介面為WCF中所有面向通訊的對象提供了契約,除了通道、通道接聽程式、通道處理站外,還有發送器和服務主機,定義了基本狀態的協定。它包括一組用於啟動狀態轉換的開啟、關閉和中止方法,開啟和關閉方法的非同步版本,一組提供狀態轉換通知的事件和一個個用於檢查對象狀態的公開State屬性,它的定義如下所示:

public interface ICommunicationObject{    // 狀態屬性    CommunicationState State { get; }    // 事件    event EventHandler Closed;    event EventHandler Closing;    event EventHandler Faulted;    event EventHandler Opened;    event EventHandler Opening;    // 方法    void Abort();    void Close();    void Close(TimeSpan timeout);    void Open();    void Open(TimeSpan timeout);    // 非同步方法呼叫    IAsyncResult BeginClose(AsyncCallback callback, object state);    IAsyncResult BeginClose(TimeSpan timeout, AsyncCallback callback, object state);    IAsyncResult BeginOpen(AsyncCallback callback, object state);    IAsyncResult BeginOpen(TimeSpan timeout, AsyncCallback callback, object state);    void EndClose(IAsyncResult result);    void EndOpen(IAsyncResult result);}

ICommunicationObject 的初始狀態是“已建立”,此時可以配置它的各種屬性。 一旦處於“已開啟”狀態,對象就可用於發送和接收訊息,但它的屬性將視為不可變。 一旦處在“正在關閉”狀態,對象就不能再處理新的發送或接收請求,但在到達“關閉”逾時前有可能完成現有的請求。 如果發生不可恢複的錯誤,則對象將轉換到“出錯”狀態,此時可以檢查該對象以擷取有關錯誤的資訊,該對象最終將關閉。 處於“已關閉”狀態時,該對象實質上已到達狀態機器的終點。 對象一旦從一個狀態轉換到下一個狀態,它將不會返回至前一狀態,整個過程圖3所示:

圖 3

通道形狀

每個通道均實現一個或多個介面,稱為通道形狀介面或通道形狀。通道形狀的最底層是 IChannel 介面,該介面提供一個 GetProperty<T> 方法,用作訪問由通道堆棧中的通道公開的任意功能的分層機制。擴充 IChannel 的五種通道形狀為:

1.IInputChannel:用於接收訊息

2.IOutputChannel:用於發送訊息

3.IRequestChannel:用於發送請求

4.IReplyChannel:用於發送回複

5.IDuplexChannel:用於雙向訊息傳遞

它們之間的關係4所示:

圖 4

其實可以看出,IDuplexChannel介面是IInputChannel和IOutputChannel介面的聯合,所有的通道形狀都同時擴充了ICommunicationObject和IChannel。這5種通道模型分別對應於不同的訊息交換模式,在使用資料報模式時,訊息發送方通道實現了IOutputChannel介面,而訊息接收方通道實現了IInputChannel介面;在請求響應模式中,用戶端通道實現IRequestChannel介面,而服務通道實現IReplyChannel介面;在雙工通訊模式中,由於雙方都能發送和接收訊息,用戶端和服務通道實現了IDuplexChannel介面,5所示:

圖 5

服務端通道

在通道物件模型中,除了IChannel介面,另外一個介面IChannelListener用於訊息的接收端,通過綁定來產生通道接聽程式(在綁定中有關於協議、編碼和傳輸的資訊,關於綁定可以參考WCF專題系列(6):訊息如何傳遞之綁定Part 1),用於偵聽傳入的訊息。通道接聽程式負責建立通道並從下面的層或者從網路接收訊息,收到的訊息將藉助於通道接聽程式所建立的通道傳送到上面的層中。整個過程6所示:

圖 6

在WCF的內部,對於訊息的每一個處理(即通道堆棧中的通道),都會對應一個內部的通道接聽程式,如針對交易處理的TransactionChannelListener和使用TCP傳輸的TcpChannelListener,分別用於建立各自對應的通道。

用戶端通道

在WCF的用戶端,通道的建立使用通道處理站,建立的這些通道負責擷取來自上一層的訊息,對訊息進行必要的處理,然後將訊息發送到下一層,7所示:

圖 7

在WCF內部,同樣對於訊息的每一個處理,都會有相應的通道處理站,如使用TCP傳輸的TcpChannelFactory,用於建立對應的通道。

總結

本文詳細介紹了WCF中的通道編程模型以及關於通道、通道監聽器和通道處理站等,大多數都是純理論的知識,在下一篇文章中,將會通過一個樣本來加深對於本文所講知識的認識。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.