《WCF技术内幕》39:第2部分_第7章_通道管理器:通道工厂和本章小结

发送者:通道工厂

发送者使用通道工厂来创建通道。它们和通道侦听器的许多特性相似,但是 不同的是它们驻留在发送者内部,而且不需要从连接上侦听消息。它们会通过 CreateChannel方法创建符合要求的连接通道而不是消极等待消息到来。和通道 侦听器一样,通道工厂也是根据它们创建的通道功能来分类的。

实际上,这意味着每个传输通道都会有一个与之关联的通道工厂,比如支持 WS-*协议的通道。和通道侦听器一样,用户代码无法直接实例化通道工厂,需要 借助于Binding(你会在第8章里看到详细的介绍)。通道工厂类型都继承自 ChannelManagerBase。而类型层次的其它部分则不相同。本节里,我们会先研究 一下通道工厂里不同的类型,然后会创建一个自定义通道工厂来继续学习我们的 DelegatorChannel例子。

IChannelFactory接口

所有的通道工厂都继承了IChannelFactory接口。这个接口实现了 ICommunicationObject接口,因此可以强制它的继承者实现通道状态机。当然还 有就是暴露与通道和通道侦听器里类似的一个查询机制。代码如下所示:

public interface IChannelFactory : ICommunicationObject  {
       T GetProperty<T>() where T: class;
}

IChannelFactory<TChannel>接口

所有的通道工厂也都实现了IChannelFactory<TChannel>接口。这个接 口继承自IChannelFactory,所以它比IChannelFactory的用处更广。 IChannelFactory<TChannel>定义了2个成员,如下所示:

public interface IChannelFactory<TChannel> :  IChannelFactory {
       TChannel CreateChannel(EndpointAddress to);
       TChannel CreateChannel(EndpointAddress to, Uri  via);
}

CreateChannel方法包含2个参数。它们是EndpointAddress和Uri类型。在运 行时,这些参数会序列化到消息里,via参数就是通道要尝试连接的地址,to是 发送消息的地址。中间可能经过消息的中转(第2章里曾经讲到)。

ChannelFactoryBase类型

通道工厂简介继承了抽象类型ChannelFactoryBase。概念上,它的作用与通 道侦听器里使用的ChannelListenerBase类型一样。换句话说, ChannelListenerBase类型也提供了一种自定义打开、关闭、发送和接受消息超 时属性的方式。它的对象模型如下所示:

public abstract class ChannelFactoryBase :  ChannelManagerBase,
                                             IChannelFactory {
  protected ChannelFactoryBase();
  protected ChannelFactoryBase(IDefaultCommunicationTimeouts  timeouts);
  // IChannelFactory implementation
  public virtual T GetProperty<T>() where T: class;
  // CommunicationObject implementation
  protected override void OnAbort();
  protected override IAsyncResult OnBeginClose(TimeSpan  timeout,
                                                 AsyncCallback callback,
                                                 Object state);
  protected override void OnClose(TimeSpan timeout);
  protected override void OnEndClose(IAsyncResult result);
  protected override TimeSpan DefaultCloseTimeout { get; }
  protected override TimeSpan DefaultOpenTimeout { get; }
  // ChannelManagerBase implementation
  protected override TimeSpan DefaultReceiveTimeout { get; }
  protected override TimeSpan DefaultSendTimeout { get; }
}

时间: 2024-10-26 02:11:46

《WCF技术内幕》39:第2部分_第7章_通道管理器:通道工厂和本章小结的相关文章

《WCF技术内幕》翻译15:第1部分_第3章_消息交换模式、拓扑与编排:消息拓扑

<WCF技术内幕>翻译15:第1部分_第3章_消息交换模式.拓扑与编排:消息拓扑.消息编排和本章小结 消息拓扑 消息拓扑描述的是在一个或多个发送者和接受者之间消息如何发送的.消息拓扑可以描述简单的应用-应用的连接关系,但是它同样可以描述复杂的应用-企业的连接.在后续文章里,面向服务的应用的作用会显现出来.概括地说,这些可能存在的拓扑结构比面向组件的应用系统能够涉及到的情况会更加多.更加复杂. 某种层次上,一个消息拓扑是一个或者多个消息交换模式(MEP)的组合.实际上可能存在有无数种拓扑结构,但

《WCF技术内幕》翻译14:第1部分_第3章_消息交换模式、拓扑与编排…

<WCF技术内幕>翻译14:第1部分_第3章_消息交换模式.拓扑与编排:消息交换模式(MEP) 第3章:消息交换模式.拓扑和编排 当设计消息应用系统的时候,有必要考虑一下消息是怎样在发送者.中介者 和接受者(前面章节介绍了这些消息参与者)流转的.系统中消息交换可能性的 波动的值可以被不同程度地详细描述.这些不同级别的细节就是总所周知的消息 交换模式(MEPS).消息拓扑和消息编排[老徐备注1].当从总体来看时,这 三个级别的细节让我们抽象地描述任何消息场景.本章会详细剖析消息交换模式 (MEP

《WCF技术内幕》翻译6:第1部分_第2章_面向服务:概述、快速定义…

<WCF技术内幕>翻译6:第1部分_第2章_面向服务:概述.快速定义面向服务.理解消息 概述 互联网上充斥着面向服务(SO)的对话,大部分会话都是抽象地描述为面向 服务.这一章我们会一些不同的方法.下面一些章页,我们会站在需求的角度看 一下面向服务.更具体地说,我们将看一下一般的消息应用和需要什么才能使他 们运转.通过这个过程,我们将发掘几个理解面向服务必需的几个概念.本章的 最后几段会给出面向服务的比较正式的定义,并且会讨论一下为什么当今世界里 面向服务对于分布式计算意义重大. 如果你问10

《WCF技术内幕》37:第2部分_第7章_通道管理器:概述和通道管理器的概念

概述 用户代码不能直接创建通道:这些工作由特定的工厂类型完成.虽然这些工 厂对象不是通道,但是通常它们也被认为是通道层的一部分.在第6章"通道" 里,我引入了设计模式[老徐备注](Erich Gamma等, Addison- Wesley, 1995)的概念,并把这种特殊的类型的称为通道工厂.在Windows Communication Foundation (WCF)的类型系统中,通道工厂有特殊的名字,这些 名称与发送者和接收者的命名不同.在接收端,这些类型被称作通道侦听器 (cha

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

概述 通道发送和接收消息.通道负责传输和WS-*协议的实现.安全以及事务处理 .通道是高组合性的-换句话说,它可以通过多种方式组合以实现应用程序需要 的功能.通道是可扩展的,并且内部设计的WCF API也允许开发人员自定义通道 . 绝大部分上,通道不会出现在主流的应用程序开发人员使用的API里.从另外 一个角度来看,Framework的开发人员,可以创建自定义通道,然后通过这些自 定义传输或者协议来传输消息.理解通道内部实现对于应用程序开发人员和 framework开发人员来说都十分重要.毕竟,

WCF技术内幕

<WCF技术内幕>39:第2部分_第7章_通道管理器:通道工厂和本章 <WCF技术内幕>38:第2部分_第7章_通道管理器:通道侦听器 <WCF技术内幕>37:第2部分_第7章_通道管理器:概述和通道管理 <WCF技术内幕>36:第2部分_第6章_通道:创建自定义通道和本章 <WCF技术内幕>35:第2部分_第6章_通道:通道功能 <WCF技术内幕>34:第2部分_第6章_通道:通道接口和基本类型 <WCF技术内幕>33:

《WCF技术内幕》26

<WCF技术内幕>26:第2部分_第5章_消息:Buffered vs Streamed.序列化和反序列化消息 Buffered vs. Streamed消息 当我们在终结点之间流动的消息时,我们会本能地想到缓存.换个方式来说 ,我们假设程序接收到一个Message时,它已经知道整个Message.这种方式称作 缓存模式(buffering).与之相对的就是流处理模式(streaming),并且有2种 流处理模式(streaming).第一种是推模型(push model),发送者按照自己 的

《WCF技术内幕》23

<WCF技术内幕>23:第2部分_第5章_消息:XmlDictionaryReader和回到Message XmlDictionaryReader类型 XmlDictionaryReader抽象类型继承自System.Xml.XmlReader,因此继承了很 多XmlReader的特性.和XmlReader 一样,XmlDictionaryReader定义了几个工厂 方法,他们返回的是XmlDictionaryReader的子类型的实例.更确切地说, XmlDictionaryReader包装

《WCF技术内幕》翻译2:《WCF技术内幕》绪论

总述 服务是现代软件架构的一个主要部分,WCF是构建基于Microsoft Windows系 统的服务程序平台.WCF编写的服务可以与其它供应商的服务交互(例如, IBM, BEA, and Novell),WCF为行业标准的演化提供了足够的空间.对于传输,WCF 支持TCP/IP.HTTP. Microsoft消息队列 (MSMQ).命名管道.WCF同样支持一系 列WS-*规范(读作WS-星)协议,比如WS-Addressing, WS-ReliableMessaging (WS-RM), W

《WCF技术内幕》翻译1:《WCF技术内幕》目录和作者简介

翻译序言: 我现在推荐一本很好的WCF学习书籍:<Inside Microsoft Windows Communication Foundation>.Justin Smith先生所著.2007年出版至今,在亚 马逊网站上评价也比较高.综合评价4星半.是一本不错的深入学习WCF的书籍. 我在搜索了很久以后,发现这本书目前还没有中文译本.随计划翻译.分享给国 内的WCF技术爱好者.翻译工作对我个人也是一次新的尝试,希望这本书的翻译 能给大家的学习带来帮助.另外如有技术问题或翻译不当,都可以留言交