WCF體系架構(之一:Client與Server資訊互動處理流程初略介紹)

來源:互聯網
上載者:User

  WCF在設計的時候,就封裝了對常用協議如Tcp\HTTP\MSMQ的處理機制。但WCF同時也允許

開發人員在WCF現有平台上進行擴充,以解決實際問題。

  大部分情況下,通過WCF常用的協議,就已經能完成了大部分工作了。在WCF揭秘中,作者

在介紹如何擴充WCF時,講了一些WCF是如何處理行為、通道、傳輸等方面的工作機制。本節從

WCF行為作為切入點,談談個人對WCF體系的理解。

  在WCF架構設計時,為了簡化WCF普通的應用情境,也為了滿足一些特殊環境下的應用,

WCF的設計者們將WCF進行分成設計。實現方式是將上層 與底層應用區分開。

    在一些特殊環境下對底層做一些擴充就行了。WCF將一般情境使用的的上層應用類型都放在

System.ServiceModel中。而對底層的擴充主要針對的類型放在System.ServiceModel

.Dispatcher與System.ServiceModel.Channels

這兩個命名空間中。本節介紹的訊息在Client與Server中大致處理流程

WCF用戶端與服務端互動過程是怎樣的呢。?首先看:

過程說明:
1、Client發起服務調用,用戶端操作組件對調用參數進行檢查,並序列化到System.ServiceModel.Channels.Message對象中。

2、用戶端運行時組件通過IMessageInspectors對訊息進行檢查並將請求資訊通過Channel發往Server

3、Service Endpoint的調度器(Dispatcher)從通道層中擷取請求訊息交給通道調度器

4、通道調度器然後將訊息交給終結點調度器。

5、根據訊息地址,操作調度器決定訊息與服務契約定義的操作匹配

6、叫用作業器將參數傳遞給實現該介面的操作並進行調用。

7、如果調用有返回,則響應訊息被傳遞給通道調用器,由通道調用器將響應資訊放入通道中,

回複給用戶端。

在這個過程中,還有一些具體的問題,如在WCF服務端,調度器(Dispatcher)如何工作?

下面分服務端、用戶端分別介紹

服務端:調度器(Dispatcher)。                                  

  調度器負責從通道中擷取資料,並傳遞給終結點相應的方法以進行處理。在這個過程中涉及到的調度器(Dispatcher)有三種:通道調度器(Channel Dispather)、終結點調度器(Endpoint Dispatcher)、操作調度器(Opeartion Dispatcher)。

過程說明:

1、通道調度器從通道中擷取資料,並根據讀取到的訊息的地址決定將訊息發送給哪個終結點。

2、終結點調度器根據訊息的Action,決定訊息所對應的介面操作。然後將訊息發送給操作調度器。

3、操作調度器接收到訊息以後,對它進行還原序列化以擷取介面需要的參數,並將參數傳遞給方法。

處理完成以後,還將對響應訊息進行序列化。

調度器(Dispatcher)由三種類型進行定義:ChannelDispatcher、DispatcherRuntime、DispatcherOperation。

ChannelDispatcher定義了服務層的通道調度器。

DispatcherRuntime代表終結點調度器層的組件。

DispatcherOperation代表操作相關的調度器組件。

用戶端:                                                             

在WCF的用戶端,用戶端運行時組件主要由兩類定義:1、System.ServiceModel.Dispatcher.ClientOperation、

2、System.ServiceModel.Dispatcher.ClientRuntime。

1、ClientOperation類                                                                         
它有兩個重要的屬性來附加相關的行為:
1、參數檢查器:ParameterInspectors。在ClientOperation中的定義:

public SynchronizedCollection<IParameterInspector> ParameterInspectors { get; }public interface IParameterInspector{    // Methods    void AfterCall(string operationName, object[] outputs, object returnValue,     object correlationState);    object BeforeCall(string operationName, object[] inputs);}

2、附加定製行為的屬性:Formatter:負責將發送的資料序列化到訊息裡,也就是System.ServiceModel.Channles.Message對象的Body中。在ClientOperation中的定義:

public IClientMessageFormatter Formatter { get; set; }public interface IClientMessageFormatter{    // Methods    object DeserializeReply(Message message, object[] parameters);    Message SerializeRequest(MessageVersion messageVersion, object[] parameters);}

 

2、ClientRuntime類也有兩個屬性來附加終結點的行為:                            

1、OperationSelector:它通過Client調用的哪個方法決定進行哪個方法的調用。在ClientRuntime中的定義:

public IClientOperationSelector OperationSelector { get; set; }public interface IClientOperationSelector{    // Methods    string SelectOperation(MethodBase method, object[] parameters);    // Properties    bool AreParametersRequiredForSelection { get; }}

2、MessageInspector:它用於檢查並有選擇性的修改發送的請求訊息和接收到的響應訊息。在ClientRuntime中的定義:

public SynchronizedCollection<IClientMessageInspector> MessageInspectors { get; }public interface IClientMessageInspector{    // Methods    void AfterReceiveReply(ref Message reply, object correlationState);    object BeforeSendRequest(ref Message request, IClientChannel channel);}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.