《WCF技术内幕》翻译31:第2部分_第6章_通道:概述与正确认识通道。
生活随笔
收集整理的這篇文章主要介紹了
《WCF技术内幕》翻译31:第2部分_第6章_通道:概述与正确认识通道。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Chapter 6: Channels 第6章:通道(Channel) Overview 概述 Channels in Perspective 正確認識Channel The Channel State Machine 通道狀態機 Introduction to Channel Shape 通道形狀 Channel Interfaces and Base Types 通道接口和基本類型 Channel Flavors 通道功能 Creating a Custom Channel 自定義通道 Summary 本章小結 ?
著重指出的是,要構建高質量的通道必須有一個異步接口。如果你還沒有接觸過異步編程的知識,在編寫自定義通道以前學習一下這些知識會事半功倍。我個人認為,最好的學習資料就是Jeffrey?Richter的《CLR?via?C#》(Microsoft?Press,?2006)【老徐備注1】
正確認識通道(Channel) 在程序里,通道一般都是和消息通信密切相關的。如果一個WCF應用程序是安全的、可靠的和支持事務處理的,那么這個程序一定是使用一個通道提供安全性,另外一個通道提供可靠性,再一個通道提供事務能力支持。因為每個通道都有自己特定的功能,而大部分程序需要的功能超出了一個通道的能力范圍,所以WCF應用程序組織適合的通道在一個堆棧里,然后使用堆棧里提供的功能。幾乎沒有任何一個產品孤立地使用一個通道。 WCF程序只會使用堆棧頂端的通道。當入棧以后,通道會執行特定的工作,然后在調用堆棧里的下一個通道(或者調用下一個通道,然后在調用返回之前繼續做自己的工作)。這里很重要的一點是,一旦消息被發送到堆棧里的通道里,通道堆棧會在其內部推進,或者拉回消息。沒有任何外部的控制器來管理在內部通道之間的消息輪轉。當一個程序建立了一個通道堆棧,這個堆棧就是一個外部不透明的實體。如你將會在本章里看到的一樣,我們也許可以查詢通道堆棧里的特定功能,但當第一次接觸像通道這樣重要的主題的時候,這個與我們希望的完全透明的東西,還差的很遠。 當通道在堆棧里組裝完畢,它的結構會說明程序的許多特性,并且堆棧里的每個通道在整個程序的功能里都扮演著不同的角色。絕大部分上,通道堆棧在頂部通道接受或者返回一個Message,而堆棧底部通道會從傳輸層生成或者接受字節流。在接受程序的通道堆棧里,換句話說,底部通道會接受字節流,然后頂部通道會返回一個Message對象。中間發生了什么取決于內部駐留的通道。通常通道堆棧中間的通道都是關于WS-*協議或者安全規范的物理實現。圖6-1演示了一個消息發送程序的通道堆棧結構。 圖6-1:一個典型的通道堆棧 ? 注意到底部堆棧接受一個Message輸入并且輸出字節流到傳輸層。底層通道也會負責特定的傳輸通信工作。如果是TCP傳輸,這個通道就會負責socket連接和發送字節流到socket。如果是MSMQ傳輸,底層通道會負責連接懂啊一個MSMQ隊列,然后發送消息到這個隊列里。注意到圖6-1,傳輸層之上的通道在消息處理過程中都有不同的作用(例如,事務、安全和可靠性)。 沒有一個具體的,萬能的通道類型。WCF類型系統包含許多通道類型的定義,并且每個通道類型定義都有特定的目的。例如,所有WCF里支持的傳輸至少有一個通道類型定義,它們提供了WCF程序通過傳輸層通信的物理方式。同樣,WCF類型系統也包含許多通道類型,它們是可靠性、事務處理和安全等高級特性的物理實現方式。 實例化通道 工廠對象實例化通道對象。大部分情況,工廠對象和通道對象存在一對一的關聯。換句話說,每個通道類型都有一個與之對應的工廠類型。沒有萬能的通道類型,也沒有萬能的工廠類型。因為通道經常在運行時組織的,所以創建通道的工廠對象也經常是在運行時組織到堆棧里的。在某種意義上說,堆棧里的工廠對象的組織方式表明了通道的組織方式。你會在第7章:“通道管理器”里學習到更詳細的內容。現在,我們知道了通道不是在用戶的代碼中創建的,而是由WCF定義的通道工廠創建的。 老徐備注: 1. CLR Via C#:Second Edition ,中文譯名:框架設計(第2版):CLR Via C# 。另外一本Jeffrey Richter名著《Applied Microsoft .NET Framework programming》中文譯名《Microsoft .NET框架程序設計(修訂版)》。都是經典。
第6章:通道(Channel)
概述
通道發送和接收消息。通道負責傳輸和WS-*協議的實現、安全以及事務處理。通道是高組合性的-換句話說,它可以通過多種方式組合以實現應用程序需要的功能。通道是可擴展的,并且內部設計的WCF API也允許開發人員自定義通道。 絕大部分上,通道不會出現在主流的應用程序開發人員使用的API里。從另外一個角度來看,Framework的開發人員,可以創建自定義通道,然后通過這些自定義傳輸或者協議來傳輸消息。理解通道內部實現對于應用程序開發人員和framework開發人員來說都十分重要。畢竟,通道是WCF應用程序的核心構件。本章會詳細介紹通道的本質,適合讀者為應用程序和framework開發人員。 提示:或許你看到過,WCF?API是相當復雜的,通道層也不例外。和WCF的其它部分一樣,學習通道包括兩個主要部分:學習類型層次和學習執行環境。個人經驗,最好的學習使用通道的方法是花一些時間學習類型層次,并且構建一個簡單的通道,然后插入到WCF基礎結構里。在類型層次上花費太多的時間容易迷失方向,直接自定義一個通道而不知道類型層次關系等于盲人摸象。著重指出的是,要構建高質量的通道必須有一個異步接口。如果你還沒有接觸過異步編程的知識,在編寫自定義通道以前學習一下這些知識會事半功倍。我個人認為,最好的學習資料就是Jeffrey?Richter的《CLR?via?C#》(Microsoft?Press,?2006)【老徐備注1】
正確認識通道(Channel) 在程序里,通道一般都是和消息通信密切相關的。如果一個WCF應用程序是安全的、可靠的和支持事務處理的,那么這個程序一定是使用一個通道提供安全性,另外一個通道提供可靠性,再一個通道提供事務能力支持。因為每個通道都有自己特定的功能,而大部分程序需要的功能超出了一個通道的能力范圍,所以WCF應用程序組織適合的通道在一個堆棧里,然后使用堆棧里提供的功能。幾乎沒有任何一個產品孤立地使用一個通道。 WCF程序只會使用堆棧頂端的通道。當入棧以后,通道會執行特定的工作,然后在調用堆棧里的下一個通道(或者調用下一個通道,然后在調用返回之前繼續做自己的工作)。這里很重要的一點是,一旦消息被發送到堆棧里的通道里,通道堆棧會在其內部推進,或者拉回消息。沒有任何外部的控制器來管理在內部通道之間的消息輪轉。當一個程序建立了一個通道堆棧,這個堆棧就是一個外部不透明的實體。如你將會在本章里看到的一樣,我們也許可以查詢通道堆棧里的特定功能,但當第一次接觸像通道這樣重要的主題的時候,這個與我們希望的完全透明的東西,還差的很遠。 當通道在堆棧里組裝完畢,它的結構會說明程序的許多特性,并且堆棧里的每個通道在整個程序的功能里都扮演著不同的角色。絕大部分上,通道堆棧在頂部通道接受或者返回一個Message,而堆棧底部通道會從傳輸層生成或者接受字節流。在接受程序的通道堆棧里,換句話說,底部通道會接受字節流,然后頂部通道會返回一個Message對象。中間發生了什么取決于內部駐留的通道。通常通道堆棧中間的通道都是關于WS-*協議或者安全規范的物理實現。圖6-1演示了一個消息發送程序的通道堆棧結構。 圖6-1:一個典型的通道堆棧 ? 注意到底部堆棧接受一個Message輸入并且輸出字節流到傳輸層。底層通道也會負責特定的傳輸通信工作。如果是TCP傳輸,這個通道就會負責socket連接和發送字節流到socket。如果是MSMQ傳輸,底層通道會負責連接懂啊一個MSMQ隊列,然后發送消息到這個隊列里。注意到圖6-1,傳輸層之上的通道在消息處理過程中都有不同的作用(例如,事務、安全和可靠性)。 沒有一個具體的,萬能的通道類型。WCF類型系統包含許多通道類型的定義,并且每個通道類型定義都有特定的目的。例如,所有WCF里支持的傳輸至少有一個通道類型定義,它們提供了WCF程序通過傳輸層通信的物理方式。同樣,WCF類型系統也包含許多通道類型,它們是可靠性、事務處理和安全等高級特性的物理實現方式。 實例化通道 工廠對象實例化通道對象。大部分情況,工廠對象和通道對象存在一對一的關聯。換句話說,每個通道類型都有一個與之對應的工廠類型。沒有萬能的通道類型,也沒有萬能的工廠類型。因為通道經常在運行時組織的,所以創建通道的工廠對象也經常是在運行時組織到堆棧里的。在某種意義上說,堆棧里的工廠對象的組織方式表明了通道的組織方式。你會在第7章:“通道管理器”里學習到更詳細的內容。現在,我們知道了通道不是在用戶的代碼中創建的,而是由WCF定義的通道工廠創建的。 老徐備注: 1. CLR Via C#:Second Edition ,中文譯名:框架設計(第2版):CLR Via C# 。另外一本Jeffrey Richter名著《Applied Microsoft .NET Framework programming》中文譯名《Microsoft .NET框架程序設計(修訂版)》。都是經典。
總結
以上是生活随笔為你收集整理的《WCF技术内幕》翻译31:第2部分_第6章_通道:概述与正确认识通道。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu卸载软件:3种卸载方式(En
- 下一篇: 在excel工作薄中如何打开多个exce