解疑什么是WCF通道
隨著WCF的快速發(fā)展,WCF已經(jīng)成為了人盡皆知的一種編程技術(shù),現(xiàn)在我們就來一起看看它的內(nèi)在原理。本文介紹了如何建立可綁定的WCF通道。首先,我們將研究一下通道的內(nèi)部機(jī)理,然后再看一下如何使用WCF類來實(shí)現(xiàn)一個(gè)通道。
什么是WCF通道
如果將服務(wù)比作人類的身體,那么通道就是我們服務(wù)的神經(jīng)系統(tǒng)。神經(jīng)系統(tǒng)擔(dān)負(fù)著從身體的各部分接受信息并傳遞給大腦的重?fù)?dān)。其中不同的感覺信息通過多路神經(jīng)以同樣的方式傳遞給大腦。和神經(jīng)系統(tǒng)類似,WCF通道建立和傳輸消息,并將這些消息從一個(gè)通道傳輸?shù)搅硪粋€(gè)通道。但和神經(jīng)系統(tǒng)不同的是,通道不是使用感覺接受器接受信息,而是通過從網(wǎng)絡(luò)上接受字節(jié)來建立信息。
有兩個(gè)通道類型:傳輸通道(Transport Channels)和協(xié)議通道(Protocol Channels)。傳輸通道負(fù)責(zé)網(wǎng)絡(luò)中的通信。而協(xié)議通道負(fù)責(zé)象數(shù)據(jù)的加密、解密的事情。通道棧中處于棧頂?shù)南⒈唤凶鯠ispatcher的一系列WCF類獲取并發(fā)送,Dispatcher將被我們創(chuàng)建并映射到我們的服務(wù)的契約(Contract)上。整個(gè)通道棧和Dispatcher的安排:
一個(gè)傳輸通道位于通道棧的***端。數(shù)據(jù)(消息)從傳輸通道開始流動(dòng),通過位于通道棧的通道集合。Dispatcher實(shí)際上是一系列類的集合。本文并不會(huì)詳細(xì)討論Dispatcher構(gòu)造,如果想詳細(xì)了解Dispatcher的情況,請(qǐng)參閱相關(guān)的WCF文檔。也許到現(xiàn)在我們可以猜到,在通道棧中的通道遠(yuǎn)比我們想象的多。而正是這些通道的存在使通道棧做著魔術(shù)般的工作。
什么是通道棧
一個(gè)通道棧由很多通道(Channels)、通道管理器(ChannelManagers)以及其他完成特殊工作的類,如將字節(jié)流轉(zhuǎn)換為消息的類。本文將主要關(guān)注一下通道和通道管理器所起的角色。
通道管理器負(fù)責(zé)建立和維護(hù)通道。通道管理器由以下兩個(gè)部分組成:
1. 通道工廠(ChannelFactories)通過一個(gè)客戶端通信系統(tǒng)來建立和管理通道。
2. 通道監(jiān)聽器(ChannelListeners)通過一個(gè)服務(wù)來建立和管理通道。
本文將關(guān)注位于WCF內(nèi)部的服務(wù),因此,我們我們將關(guān)注通道監(jiān)聽器和通道棧中的通道在整個(gè)系統(tǒng)中的角色。綁定(Bindings)是一些綁字元素的集合。這些綁定元素建立通道監(jiān)聽器,而監(jiān)聽器建立和管理通道。
#T#根據(jù)微軟提供的文檔,數(shù)據(jù)從一個(gè)通道到達(dá)另一個(gè)通道會(huì)衰減,而這些會(huì)被通道監(jiān)聽器捕獲并處理。在我們討論通道監(jiān)聽器和通道如何在一起工作并為我們提供通訊服務(wù)之前,有一個(gè)重要的思想必須理解。一個(gè)狀態(tài)機(jī)管理WCF通訊中的所有狀態(tài)。在狀態(tài)機(jī)中的狀態(tài)都是可預(yù)料的,如Open、Abort、Close等等。所有參與通訊狀態(tài)機(jī)的類都支持ICommunicationObject接口。如果想了解完整的 WCF通訊狀態(tài)機(jī)的定義,請(qǐng)參閱相關(guān)的WCF文檔。到現(xiàn)在為止,我已經(jīng)向讀者介紹了一個(gè)通道棧的組成,下面讓我們來看看如何編寫代碼來控制通道棧。