本章目录:
第7章:通道管理器
概述
通道管理器的概念
接收者:通道侦听器
发送者:通道工厂
本章小结
第
7
章:通道管理器
概述
用户代码不能直接创建通道;这些工作由特定的工厂类型完成。虽然这些工厂对象不是通道,但是通常它们也被认为是通道层的一部分。在第6章“通道”里,我引入了设计模式
【老徐备注】(Erich Gamma等, Addison-Wesley, 1995)的概念,并把这种特殊的类型的称为通道工厂。在Windows Communication Foundation (WCF)的类型系统中,通道工厂有特殊的名字,这些名称与发送者和接收者的命名不同。在接收端,这些类型被称作通道侦听器(channel listeners)。在发送端,这些类型被称作通道工厂(channel factories). 虽然通道侦听器和通道工厂拥有相同的特性和功能,但是它们却包含不同的对象和行为模型。当放在一起的时候,它们被称作通道管理器。本章就会介绍通道管理器的内部类型:通道侦听器和通道工厂。你会了解这些类型的基本知识,以及它们的对象模型,然后我们会学习如何创建自定义通道的例子。本章会给出部分代码,完整的代码直到下一章“绑定”才会全部给出,因为创建通道要使用到
Binding。。
通道是WCF程序实现消息功能的物理方式,而通道工厂和通道侦听器是WCF程序创建消息功能的方式。正如没有万能的通道类型,也没有万能的通道工厂或者通道侦听器。通道可以根据功能来划分(例如,WS-ReliableMessaging、TCP/IP传输等等),通道管理器也可以更具他们创建的通道功能划分,比如,WS-ReliableMessaging通道是由WS-ReliableMessaging通道管理器创建的,而且相同的通道管理器不会重复创建通道。
这并不是说一个通道管理器只创建一种类型的通道。恰恰相反,通道管理器可以创建多种不同的通道,但是这些通道会驻留在一个特定的功能组里。很明显的一点就是,通道管理器创建的通道类型只是形状方面存在差别。有时候,通道管理器甚至可以创建类型和形状一样的通道(例如,双工通道)
通道管理器与通道拥有许多相同的特性。因为通道在运行时会组织在一个堆栈里,所以通道管理器也会被组织到对站立。某种意义上说,堆栈里的通道管理器的组织情况就是通道的组织情况。通道管理器实现了ICommunicationObject接口,而且拥有第
6章里所述的通道状态机。更进一步说,它们也实现了查询可用通道的机制。
通道管理器的概念
所有的通道管理器都继承自一个抽象基类型:System.ServiceModel.Channels.
ChannelManagerBase。类名没有体现出这个类型的目的,从名字上看,一种猜测就是
ChannelManagerBase类型是追踪通道管理器创建的通道的一种方式。在早期的WCF(那时被称为Indigo),确实是这个目的。早期设计使得通道的状态和生命周期与通道管理器对象的状态和生命周期紧密耦合在一起。例如,当一个通道管理器关闭的时候,它也会关闭所有创建的通道实例。
对于发送者可以使用这个模型,但是对于接收者来说就不是那么完美了,因为接收者对于一个统一资源标识符(URI)只能有一个通道侦听器。接收者经常需要创建新的通道侦听器堆栈,并且关闭现有的侦听器堆栈。因为关闭一个接收通道可能执行一些其它工作(比如,WS-RM消息,提交或中断事务等等),所以关闭对应的通道侦听器就需要花费很长时间。如果通道和通道侦听器没有紧密耦合,就可以关闭当前的侦听器,完成当前的工作,然后启动一个新的通道侦听器去处理新的消息。WCF团队在第一个版本里使用了这个模型,主要是因为它能给接收程序带来更好的吞吐量。
本质上,早期的通道管理器的概念在发送者上依然有效。ChannelManagerBase类型不在管理通道的工作,作为替代,在通道工厂的类型层次中,它们会负责管理通道。因为这个改变,ChannelManagerBase类型就成为一个强制通道管理器实现通道状态机、实现查询机制、传递
Binding超时属性给通道的简单方式。
老徐备注:
《设计模式:可复用面向对象软件的基础》
- 作者: (美)Erich Gamma Richard Helm Ralph Johnson John Vlissides
- 译者: 李英军[同译者作品] 马晓星 蔡敏 刘建中
- 丛书名: 计算机科学丛书
- 出版社:机械工业出版社
- ISBN:7111075757
- 上架时间:2000-7-1
- 出版日期:2000 年6月
- 页码:254
- 版次:1-13
本文转自 frankxulei 51CTO博客,原文链接:http://blog.51cto.com/frankxulei/318551
,如需转载请自行联系原作者