1. 程式人生 > >快速入門系列

快速入門系列

body 現在 安全 behavior 需求 discovery 中心 驗證 溝通

最後一章將進行WCF擴展和新特性的學習,這部分內容有一定深度,有一個基本的了解即可,當需要自定義一個完整的SOA框架時,可以再進行細致的學習和實踐。

技術分享

服務端架構體系的構建主要包含接下來的幾個要素:服務描述、終結點分發器選擇機制、信道分發器、終結點分發器、分發運行時、分發操作。

ServiceDescription服務描述包含一組終結點和服務行為列表,而終結點包含服務地址、綁定和契約信息,契約中則包含操作和契約行為,操作信息中包含操作行為

終結點分發器具有兩個消息篩選器,一個是地址篩選器,另一個是契約篩選器,均繼承自MessageFilter,信道分發器通過他們來選擇某個終結點分發器來接受請求消息,此外還有一個FilterPriority來決定順序。在WCF中,終結點ServiceEndpoint和其分發器EndpointDispatcher一一對應。

信道分發器ChannelDispatcher包含信息監聽器、錯誤處理器、進行流量控制的服務限流器和信道初始化器,這部分可以擴展的屬性包括異常細節信息的傳播、手工尋址、最大掛起消息數、同步/異步消息接受和事物控制。

分發運行時DispatcherRuntime是整個WCF服務端運行的核心,其包含很多擴展組件,例如關於安全的ServiceAuthenticationManager、ServiceAuthorizationManager、RoleProvider和AuthorizationPolicy,與服務激活相關的實例提供者、上下文提供者、單例實例上下文和實例上下文初始化器,與並發控制有關的同步上下文,可以對接受的請求消息和回復消息進行相應操作的消息檢驗器,運行時操作列表和用於選擇操作的選擇器,自己在項目構建中很多時候可以參考這樣的方式。此外,還包括以下的擴展屬性,授權、安全審核、事務和會話、未處理的操作、SOAP報頭驗證、並發控制。

分發操作是在Servicehostk開啟後,有OperationDescription轉化來的,附加在其上的可擴展組件包括調用上下文初始化器CallContextInitializer,參數檢驗器ParameterInspector,用於消息序列化和反序列化的消息格式化器DispatchMessageFormatter,用於操作方法的執行的操作調用器OperationInvoker。

客戶端架構體系的構建則包含如下幾個要素:創建ChannelFactory<TChannel>、客戶端運行時、客戶端操作、服務代理和服務調用。在通過調用構造函數創建一個ChannelFactory<TChannel>對象後,WCF會根據指定的終結點創建一個ServiceEndpoint對象,其整個結構如下圖示。

技術分享

通過定義四種行為對WCF擴展,這4中行為分別是服務行為、終結點行為、契約行為和操作行為,它們具有相同的4個方法Validate、AddBindingParameters、ApplyDispatchBehavior和ApplyClientBehavior。原書還包含一個關於本地化的擴展例子,需要時可以查閱,註意Properties中的資源文件。

ServiceHost對WCF的擴展一般是通過繼承自ServiceHost的自定義類來實現,但需要註意,對Description、分發運行時的定制是無效的,此外可以通過自定義類來集成Unity。

技術分享

簡化開發體驗內容包括:默認終結點(標準終結點)、默認綁定配置、默認行為配置和無.svc文件服務激活等。這部分默認的配置就不一一介紹了,唯一需要介紹的就是WCF提供的標準終結點,如下表所示。

標準終結點 描述
mexEndpoint 用於公開服務元數據的標準終結點
dynamicEndpoint 使用WS-Discovery在運行時動態查找終結點地址的標準終結點
discoveryEndpoint 發送/接收發現消息的標準終結點
UdpDiscoveryEndpoint 通過UDP多播方式發送/接收發現消息的標準終結點
announcementEndpoint 由服務用於發送公告消息的標準終結點
udpAnnouncementEndpoint 由服務用於通過UDP綁定發送公告消息的標準終結點
workflowControlEndpoint 可用於對工作流實例調用控制操作的標準終結點
webHttpEndpoint 帶有自動添加webHttpBehavior行為的WebHttpBinding綁定的標準終結點
webScriptEndpoint 帶有自動添加webScriptEnablingBehavior行為的WebHttpBinding綁定的標準終結點

此外,無.svc文件服務的配置如下所示。

技術分享 View Code

路由服務實際上就是一個WCF服務,當端到端通信而不是點對點通信非常有用,可以將請求轉發。RoutingService包括4個服務契約接口,ISimplexDatagramRouter、ISimplexSessionRouter、IRequestReplyRouter和IDuplexSessionRouter,實際上是同ProcessRequest/ProcessMessage兩個方法來工作,此外其OperationBehaviorAttribute特性的Impersonation設置為Allowed即允許身份模擬。其路由策略涉及如下幾個要素,RoutingBehavior服務行為、消息篩選器和篩選器表。

服務發現

之前的內容都是服務提供方和需求方直接溝通場景,那麽現在有一個問題,當企業應用很多,需要統一管理服務建立SOA體系時,如何發現服務。這兒就涉及WS-Discovery服務發現的知識了,其包含兩種基本的操作模式,Ad-Hoc和Managed。前者客戶端在一定的網絡範圍內以廣播的形式發送探測Probe消息搜索目標服務,在該探測消息中,包含相應的搜尋條件,不過感覺管理性很差,不推薦。後者Managed模式通過維護一個所有可用目標服務的中心發現代理(中介者模式),客戶端只需要將探測消息發給該中心,即可得到目標服務信息,接下來著重介紹Managed模式。

Managed模式,可用服務都註冊在發現代理中,其服務發現過程如下圖所示,和想象中的基本一致,服務是去中心的,但服務發現即其目錄是中心化的。

技術分享

接下來通過蔣大師的一個自定義的發現代理服務來徹底了解一個SOA治理中心基本構建方法,其基本步驟包括:創建自定義發現代理服務;寄宿發現代理服務和目標服務;服務的動態調用。

技術分享 View Code

終於完成WCF最後一塊拼圖,非常的開心,雖然趕腳只掌握了3成左右,但也基本足夠了,需要時再回顧學習了。

參考資料:

[1]蔣金楠. WCF全面解析[M]. 上海:電子工業出版社, 2012.

快速入門系列