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