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