《WCF技术内幕》翻译31:第2部分_第6章_通道:概述与正确认识通道。

  1. 云栖社区>
  2. 博客>
  3. 正文

《WCF技术内幕》翻译31:第2部分_第6章_通道:概述与正确认识通道。

技术小胖子 2017-11-16 18:33:00 浏览630
展开阅读全文
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
本章小结
 

第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框架程序设计(修订版)》。都是经典。





 本文转自 frankxulei 51CTO博客,原文链接:http://blog.51cto.com/frankxulei/318574,如需转载请自行联系原作者


网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注