日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WCF扩展:行为扩展Behavior Extension一

發布時間:2025/6/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WCF扩展:行为扩展Behavior Extension一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

行為擴展Behavior Extension,使用自定義行為擴展Service Model

?

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

下面是客戶端調用一個服務之后,事件的發生順序。

  • 客戶端的operation selector根據客戶端執行的方法決定請求服務端的哪個operation。
  • 掛在client runtime components上的parameter inspactors檢查客戶端的調用參數,也可以修改客戶端的調用參數。parameter inspactor用來驗證傳出到服務端的數據是否在合法的范圍,如果不在可以修改它。也可以將數據項轉變為特定的值。
  • 客戶端的message formatter將數據項序列化為xml,放入到wcf的消息中。
  • System.ServiceModel.Channel.Message代表傳遞到endpoint level的client runtime components的消息。
  • 客戶端的message inspactor檢查,隨意修改System.ServiceModel.Channel.Message對象。
  • 消息傳輸到WCF的Channel Layer。更準確的說法是,消息傳遞到Channel Stack的頂層Channel。
  • 消息被服務接收,從Channel Layer傳遞到channel dispatcher,然后傳輸給適當的endpoint。
  • instance context provider獲取狀態信息。
  • 根據消息中的address,dispatch operation selector決定交給哪個operation。
  • dispatch message inspactor可以檢查,隨意修改傳入的System.ServiceModel.Channel.Message對象。
  • instance provider創建或者獲取的某一個服務的實例。
  • 通過dispatch operaiton selector將消息傳遞給dispatcher component。
  • dispatch message formatter反序列化消息中的body部分,放入數據項數組中。
  • dispatcher組件附加的parameter inspactor可以檢查,隨意修改數據項。
  • operation invoker執行具體的服務實現,將反序列化的數據項傳遞給方法的參數。
  • 如果方法有返回值,附加到dispatcher的parameter inspactor可以檢查,修改返回值。
  • dispatch message formatter序列化返回值,放入System.ServiceModel.Channel.Message對象。
  • 響應消息傳遞給endpoint 層的dispatcher組件。
  • dispatch message inspactor可以檢查,隨意修改響應消息。
  • instance context provider可以持久化,或者是拋棄狀態信息。
  • instance provider有機會處理掉它創建的服務的實例instance。
  • 響應消息傳遞到channel dispatcher,傳遞給最高層的channel。
  • 響應消息被客戶端接收,傳遞給客戶端的channel layer。
  • 客戶端的message inspactor檢查,修改響應消息。
  • 客戶端的operation selector識別響應消息中的操作。
  • 響應消息被傳遞到發出請求的那個操作。
  • 客戶端的message formatter反序列化響應消息的body部分,傳遞給數據項數組。
  • 這些數據項數組會別傳遞給掛在client runtime的parameter inspactor,可以檢查和修改數據項。
  • 程序員的代碼使用數據項進行操作。
  • Technorati 標簽: WCF,Extension,Behavior

    轉載于:https://www.cnblogs.com/virusswb/archive/2010/10/27/1862577.html

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的WCF扩展:行为扩展Behavior Extension一的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。