WCF從理論到實踐(6):WCF架構(gòu)
前面的幾篇文章,分別介紹了WCF的基本知識和Endpoint的三個重要組成部分:Address,Contract,Binding。但無非管中窺豹而已,本文就闡述一下WCF的架構(gòu),從整體的角度來重新對WCF加深認(rèn)識。
本文的出發(fā)點:
通過閱讀本文,能使您獲得以下知識:
- WCF的架構(gòu)圖
- WCF架構(gòu)的關(guān)鍵元素及其概念
-
創(chuàng)建一示例程序,并對其按架構(gòu)圖進(jìn)行解析
本文適合的讀者:
本文適合WCF初學(xué)者,以前可以對WCF一無所知,本文只作介紹,不涉及WCF技術(shù)具體技術(shù)難點和介紹。
WCF的架構(gòu)圖
下圖為WCF的架構(gòu)圖:
WCF架構(gòu)的關(guān)鍵元素及其概念
Contracts and Description (協(xié)定和說明):
協(xié)定定義消息系統(tǒng)的各個方面。包括Data Contract(數(shù)據(jù)協(xié)定),Message Contract(消息協(xié)定) ,Service Contract(服務(wù)協(xié)定)。Data Contract是WCF中 Service與Client端之間用來交換的數(shù)據(jù)的格式定義,它采用Xml 架構(gòu)定義語言(XSD)來定義,使得服務(wù)端和客戶端都能理解數(shù)據(jù)格式定義。消息協(xié)定能定義消息的特定部分,默認(rèn)情況下 ,WCF的消息是由固定格式的,但某些情況下,也可以使用Message Contrace來自定義消息格式。服務(wù)協(xié)定指定服務(wù)端公開的方法簽名,這些方法能夠在遠(yuǎn)程被調(diào)用。舉個國家和間諜的例子,A 是國家C派往其它國家的一名間諜,他負(fù)責(zé)收集情報,被通過某種特定的渠道,將獲得的情報發(fā)送給國家C,假如A在出去執(zhí)行任務(wù)之前,國家C的特工部門為其編訂了一套密文,這個密文只有國家C和特工部門和A知道具體含義,這些密文正是在A與其國家之間進(jìn)行傳遞的數(shù)據(jù),國家C對密文的制定,正是WCF中對交換數(shù)據(jù)格式的定義,屬于Data Contract范疇,而A在獲得情報之后,通過電報的方式將情報發(fā)回給國家情報機(jī)關(guān),它首先設(shè)置電報的發(fā)送地址并注明來源,并且將情報信息編碼成密文進(jìn)行發(fā)送,對電報報文的格式定義就屬于Message Contract范疇,而國家情報機(jī)關(guān)為A要想接受和對A發(fā)送任務(wù)命令,必須也提供固定的通訊設(shè)施和人,這些能夠被A所聯(lián)絡(luò)上的通訊設(shè)施和人就屬于Service Contract的范疇。
Service Runtime(服務(wù)運(yùn)行時)
上面說的協(xié)定是在開發(fā)wcf服務(wù)時候制定的,而服務(wù)運(yùn)行時,是在服務(wù)實際運(yùn)行時候地一些行為控制。ErrorBehavior是在服務(wù)出現(xiàn)錯誤的時候發(fā)生的操作,ThrottingBehavior能夠限制創(chuàng)建多少個實例和會話,通過這個您能夠控制WCF服務(wù)的性能,MetaBehavior(元數(shù)據(jù)行為)控制是否和如何向外部提供元數(shù)據(jù)。TransactionBehavior能定義事務(wù)性,使得當(dāng)發(fā)生異常的時候能進(jìn)行回滾。DispatchBehavior(調(diào)度行為)能控制WCF處理消息的方式,通過擴(kuò)展性功能可以自定義運(yùn)行時進(jìn)程。 例如,消息檢查功能用于檢查消息的各個部分,使用參數(shù)篩選功能可以根據(jù)作用于消息頭的篩選器來執(zhí)行預(yù)設(shè)操作。下圖顯示了WCF的消息處理流程
Messaging(消息傳遞)
在WCF中,消息是在通道(Channel)中進(jìn)行傳遞的。通道是以某種方式對消息進(jìn)行處理的組件 。一組通道可以組合成"通道堆棧",主要有兩大種通道:協(xié)議通道和傳輸通道。協(xié)議通道說明數(shù)據(jù)的格式和交換模式,WS-Security 是對在消息層啟用安全性的 WS-Security 規(guī)范的實現(xiàn)。 通過 WS-Reliable Messaging 通道可以保證消息的傳遞。 編碼器提供了大量的編碼,可使用這些編碼來滿足消息的需要。 HTTP 通道指定應(yīng)使用超文本傳輸協(xié)議來傳遞消息。 同理,TCP 通道指定 TCP 協(xié)議。 事務(wù)流通道控制已經(jīng)過事務(wù)處理的消息模式。 通過命名管道通道可以進(jìn)行進(jìn)程間通信。 使用 MSMQ 通道可以與 MSMQ 應(yīng)用程序進(jìn)行互操作。
Activation and Hosting(激活和承載)
WCF服務(wù)的最終形式仍然是程序,它能夠"自承載",也可以寄宿到其它應(yīng)用程序之中 ,如IIS,Windows激活服務(wù),Com+等。
創(chuàng)建一示例程序,并對其按架構(gòu)圖進(jìn)行解析
創(chuàng)建一個最簡單的WCF服務(wù),并利用上述的架構(gòu)對其解析
打開vs2008,創(chuàng)建一個Wcf Application,命名為WcfSample1 ,如下圖所示:
我們就利用系統(tǒng)模板產(chǎn)生的文件來進(jìn)行解析,完成上步中,會自動產(chǎn)生如下的項目:
打開IService.cs,
為了簡單的闡述MessageContract,我們新建一個CustomMessage.cs,代碼如下:
為使用該服務(wù),我們再創(chuàng)建一個ServiceContract接口和其具體實現(xiàn),分別為:IMessagingHello.cs和MessageHello.svc
和
在web.config作如下的配置:
創(chuàng)建一個客戶端應(yīng)用項目Client用于消費(fèi)上面創(chuàng)建的服務(wù),創(chuàng)建項目后,添加Service引用,如下圖所示:
分別添加對MessageHello.svc和Service1.svc的引用后,在programe.cs中添加如下代碼:
用tcpTrace來監(jiān)聽自定義報文,可以得到
發(fā)送的消息報文為:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><HelloGreetingMessage xmlns="http://tempuri.org/"><Salutations xmlns="http://jillzhang.cnblogs.com">jillzhang</Salutations></HelloGreetingMessage></s:Body></s:Envelope>
而接受到消息報文為:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Header><h:OutOfBandData s:mustUnderstand="1" xmlns:h="http://jillzhang.cnblogs.com">Served by object 63334862.</h:OutOfBandData></s:Header><s:Body><HelloResponseMessage xmlns="http://tempuri.org/"><ResponseToGreeting xmlns="http://jillzhang.cnblogs.com">Service received: jillzhang</ResponseToGreeting></HelloResponseMessage></s:Body></s:Envelope>
從而可知MessageContract已經(jīng)起了作用。
有關(guān)如何用tcpTrace監(jiān)視消息報文,參見:http://www.rzrgm.cn/artech/archive/2007/06/14/782845.html
本文參考文章
本文示例項目
- 服務(wù)端和客戶端: /Files/jillzhang/WcfSample1.rar
- 自定義消息的log文件: /Files/jillzhang/cumtommsg.txt
出處:http://jillzhang.cnblogs.com/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

過閱讀本文,能使您獲得以下知識:
1)WCF的架構(gòu)圖
2)WCF架構(gòu)的關(guān)鍵元素及其概念
3)創(chuàng)建一示例程序,并對其按架構(gòu)圖進(jìn)行解析
浙公網(wǎng)安備 33010602011771號