WCF從理論到實踐(6):WCF架構

作者: jillzhang  來源: 博客園  發布時間: 2008-11-28 15:02  閱讀: 3730 次  推薦: 0   原文鏈接   [收藏]  

系列文章導航:

WCF從理論到實踐(1):揭開神秘面紗

WCF從理論到實踐(2):決戰紫禁之巔

WCF從理論到實踐(3):八號當鋪之黑色契約

WCF從理論到實踐(4):路在何方

WCF從理論到實踐(5):Binding細解

WCF從理論到實踐(6):WCF架構

WCF從理論到實踐(7):消息交換模式

WCF從理論到實踐(8):事件廣播

WCF從理論到實踐(9):實例模式和對象生命周期

WCF從理論到實踐(10):異常處理

WCF從理論到實踐(11)-異步

WCF從理論到實踐(12):事務

WCF從理論到實踐(13):事務投票

WCF從理論到實踐(14):WCF解決方案模板

WCF從理論到實踐(15):響應變化

WCF從理論到實踐(16):操作重載(帶視頻+ppt+源碼)

WCF從理論到實踐(17):OO大背離(帶視頻+ppt+源碼)

 

前面的幾篇文章,分別介紹了WCF的基本知識和Endpoint的三個重要組成部分:Address,Contract,Binding。但無非管中窺豹而已,本文就闡述一下WCF的架構,從整體的角度來重新對WCF加深認識。

本文的出發點:

通過閱讀本文,能使您獲得以下知識:

  1. WCF的架構圖
  2. WCF架構的關鍵元素及其概念
  3. 創建一示例程序,并對其按架構圖進行解析

     

本文適合的讀者:

本文適合WCF初學者,以前可以對WCF一無所知,本文只作介紹,不涉及WCF技術具體技術難點和介紹。

 

WCF的架構圖

下圖為WCF的架構圖:

 

WCF架構的關鍵元素及其概念

Contracts and Description (協定和說明):

協定定義消息系統的各個方面。包括Data Contract(數據協定),Message Contract(消息協定) ,Service Contract(服務協定)。Data Contract是WCF中 Service與Client端之間用來交換的數據的格式定義,它采用Xml 架構定義語言(XSD)來定義,使得服務端和客戶端都能理解數據格式定義。消息協定能定義消息的特定部分,默認情況下 ,WCF的消息是由固定格式的,但某些情況下,也可以使用Message Contrace來自定義消息格式。服務協定指定服務端公開的方法簽名,這些方法能夠在遠程被調用。舉個國家和間諜的例子,A 是國家C派往其它國家的一名間諜,他負責收集情報,被通過某種特定的渠道,將獲得的情報發送給國家C,假如A在出去執行任務之前,國家C的特工部門為其編訂了一套密文,這個密文只有國家C和特工部門和A知道具體含義,這些密文正是在A與其國家之間進行傳遞的數據,國家C對密文的制定,正是WCF中對交換數據格式的定義,屬于Data Contract范疇,而A在獲得情報之后,通過電報的方式將情報發回給國家情報機關,它首先設置電報的發送地址并注明來源,并且將情報信息編碼成密文進行發送,對電報報文的格式定義就屬于Message Contract范疇,而國家情報機關為A要想接受和對A發送任務命令,必須也提供固定的通訊設施和人,這些能夠被A所聯絡上的通訊設施和人就屬于 Service Contract的范疇。

Service Runtime(服務運行時)

上面說的協定是在開發wcf服務時候制定的,而服務運行時,是在服務實際運行時候地一些行為控制。ErrorBehavior是在服務出現錯誤的時候發生的操作,ThrottingBehavior能夠限制創建多少個實例和會話,通過這個您能夠控制WCF服務的性能,MetaBehavior(元數據行為) 控制是否和如何向外部提供元數據。TransactionBehavior能定義事務性,使得當發生異常的時候能進行回滾。 DispatchBehavior(調度行為)能控制WCF處理消息的方式,通過擴展性功能可以自定義運行時進程。 例如,消息檢查功能用于檢查消息的各個部分,使用參數篩選功能可以根據作用于消息頭的篩選器來執行預設操作。下圖顯示了WCF的消息處理流程

 

Messaging(消息傳遞)

在WCF中,消息是在通道(Channel)中進行傳遞的。通道是以某種方式對消息進行處理的組件 。一組通道可以組合成"通道堆棧",主要有兩大種通道:協議通道和傳輸通道。協議通道說明數據的格式和交換模式,WS-Security是對在消息層啟用安全性的 WS-Security 規范的實現。 通過 WS-Reliable Messaging 通道可以保證消息的傳遞。 編碼器提供了大量的編碼,可使用這些編碼來滿足消息的需要。 HTTP 通道指定應使用超文本傳輸協議來傳遞消息。 同理,TCP 通道指定 TCP 協議。 事務流通道控制已經過事務處理的消息模式。 通過命名管道通道可以進行進程間通信。 使用 MSMQ 通道可以與 MSMQ 應用程序進行互操作。

Activation and Hosting(激活和承載)

WCF服務的最終形式仍然是程序,它能夠"自承載",也可以寄宿到其它應用程序之中 ,如IIS,Windows激活服務,Com+等。

創建一示例程序,并對其按架構圖進行解析

創建一個最簡單的WCF服務,并利用上述的架構對其解析

打開vs2008,創建一個Wcf Application,命名為WcfSample1 ,如下圖所示:

我們就利用系統模板產生的文件來進行解析,完成上步中,會自動產生如下的項目:

打開IService.cs,

為了簡單的闡述MessageContract,我們新建一個CustomMessage.cs,代碼如下:

為使用該服務,我們再創建一個ServiceContract接口和其具體實現,分別為:IMessagingHello.cs和MessageHello.svc

在web.config作如下的配置:

創建一個客戶端應用項目Client用于消費上面創建的服務,創建項目后,添加Service引用,如下圖所示:

分別添加對MessageHello.svc和Service1.svc的引用后,在programe.cs中添加如下代碼:

用tcpTrace來監聽自定義報文,可以得到

發送的消息報文為:

jillzhang

而接受到消息報文為:

Served by object 63334862.Service received: jillzhang

從而可知MessageContract已經起了作用。

有關如何用tcpTrace監視消息報文,參見:http://www.cnblogs.com/artech/archive/2007/06/14/782845.html

 

本文參考文章

  1. http://www.cnblogs.com/artech/archive/2007/06/14/782845.html
  2.  

本文示例項目

  1. 服務端和客戶端: /Files/jillzhang/WcfSample1.rar
  2. 自定義消息的log文件: /Files/jillzhang/cumtommsg.txt
0
0
 
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()