轉帖|其它|編輯:郝浩|2010-10-28 14:55:44.000|閱讀 722 次
概述:對于WCF的一些基本概念不在本文的內容中詳細介紹,本文基于你對WCF有一定的認識,并對于其中的基本概念已經有一定的理解。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
1 引言
WCF是一個極具可擴展性的分布是消息通信框架。
對于WCF的一些基本概念不在本文的內容中詳細介紹,本文基于你對WCF有一定的認識,并對于其中的基本概念已經有一定的理解。
2 行為擴展
2.1 行為相關的流程
上圖是客戶端的行為相關的一個流程,也可以看做是一個客戶端的調用之后,數據流程。
每個Endpoint對應一個Client Runtime Component,每個Client Runtime Component有多個Client Operation Runtime Component,每個Client Operation Runtime Component又對應一個Endpont’s Contract的方法。
調用一個wcf方法之后,Client Operation Runtime Component負責序列化提交的數據(將來還會反序列化服務端響應的數據),經過Client Runtime Component向上傳遞,最終傳遞給WCF Channel Layer。
上圖是一個服務端的行為流程。主要參數的組件是Dispatcher組件。它負責接收client的請求消息,傳遞給適當的服務去處理。
如圖,有三種dispatcher。Channel Dispatcher,Endpoint Dispatcher,Operation Dispatcher。它們的職責都在圖中有標識。
2.2 擴展步驟
用自定義的行為擴展client runtime component和dispatcher,通常有三個步驟。
2.2.1 聲明你要提供的行為屬于什么類型
首先要聲明這個自定義行為的類型。是工作在客戶端,用來向消息中添加序列化之后的提交到服務器的數據?還是工作在服務端,用來管理服務類型的實例?通過實現適當的接口,這一步很容易實現。這些接口大多定義在System.ServiceModel.Dispatcher命名空間中。
假如要自定義一個工作在客戶端的行為,功能是自定義數據的序列化過程。實現IClientMessageFormatter接口,實現里面的序列化和反序列化方法就可以了。
假如要自定義一個工作在服務端的行為,功能是管理服務類型的實例。實現IInstanceProvider接口就可以了。
在客戶端,和客戶端運行時相關的兩個類是:
1 System.ServiceModel.Dispatcher.ClientOperation
代表operation操作層面的運行時。
System.ServiceModel.Dispatcher.ClientOperation有兩個屬性可以附加操作類型的行為。
1)ParameterInspectors,是System.ServiceModel.Dispatcher.IParameterInspector對象的集合。因此,你可以創建自己的參數Inspector行為,可以檢查和隨意的修改傳入傳出的數據。
2)Formatter,實現IClientMessageFormatter接口的對象可以賦值給這個屬性。用來將傳遞給服務端的數據序列化到消息中,更精確的說是System.ServiceModel.Channels.Message類型的對象中。
2 System.ServiceModel.Dispatcher.ClientRuntime
代表endpoint層面的運行時。有兩個屬性可以附加endpoint行為。
1)OperationSelector,實現System.ServiceModel.Dispatcher.IClientOperationSelector 接口的對象可以賦值給這個屬性。用來決定一個請求分配到服務的那個方法上。
2)MessageInspectors,實現System.ServiceModel.Dispatcher.IClientMessageInspector接口的對象集合。可以檢查,隨意修改請求和響應的消息。可以拷貝一份提交的消息,以后可以做審計功能。
在服務端,和dispatcher相關的有三個類。
1 System.ServiceModel.Dispatcher.DispatchOperation
代表operation操作相關的dispatcher類。有三個屬性可以附加操作相關的行為。
1)Formatter,實現接口System.ServiceModel.Dispatcher.IDispatchMessageFormatter 的對象。將傳入到服務端的消息反序列化為數據,將輸出到客戶端的響應序列化到消息中。
2)ParameterInspectors,是System.ServiceModel.Dispatcher.IParameterInspector對象的集合。這些對象可以檢查,隨意修改從dispatcher message formatter傳入的反序列化的數據,和傳出去的響應數據。
3)Invoker,實現System.ServiceModel.Dispatcher.IOperationInvoker的對象。用來執行服務的實現(服務的接口實現)操作,將由輸入消息反序列化產生的數據傳遞過去。
2 System.ServiceModel.Dispatcher.DispatchRuntime
代表endpoint層面的組件。有下面的幾個可以附件行為的屬性。
1)InstanceContextProvider,實現System.ServiceModel.Dispatcher.IInstanceContextProvider 接口的對象。用來管理狀態信息。
2)OperationSelector,實現System.ServieModel.Dispatcher.IDispatchOperationSelector接口的對象,根據請求消息中的地址,將消息分配到適當的操作。
3)MessageInspectors,實現System.ServiceModel.Dispatcher.IDispatchMessageInspector接口的對象,用來附件一個消息檢查器,檢查輸入的請求消息。
4)InstanceProvider,實現System.ServiceModel.Dispatcher.IInstanceProvider接口的對象,用來管理服務的類型。
3 System.ServiceModel.Dispatcher.ChannelDispatcher
下面是客戶端調用一個服務之后,事件的發生順序。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客轉載