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