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