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)

概述

提示:或许你看到过,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章_通道:概述与正确认识通道。相关推荐

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

    翻译序言: 我现在推荐一本很好的WCF学习书籍:<Inside Microsoft Windows Communication Foundation>.Justin Smith先生所著.2 ...

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

    绪论 总述     服务是现代软件架构的一个主要部分,WCF是构建基于Microsoft Windows系统的服务程序平台.WCF编写的服务可以与其它供应商的服务交互(例如, IBM, BEA, an ...

  3. 经典技术书籍分享(5):《WCF技术内幕》封面和购买地址

    经过很长时间的等待,<WCF技术内幕>这本书最终确定确定封面,会于下周三,也就是2010年7月21日印刷完毕. 定价为39.8RMB~~~现在China Pub打折后29块多. 网上已经可 ...

  4. 《Storm技术内幕与大数据实践》一第1章 绪论

    本节书摘来异步社区<Storm技术内幕与大数据实践>一书中的第1章,作者: 陈敏敏 , 黄奉线 , 王新春 责编: 杨海玲,更多章节内容可以访问云栖社区"异步社区"公众 ...

  5. 《WCF技术内幕》翻译5:第1部分_第1章_蓝月亮:WCF介绍和本章小结

    WCF介绍   在上世纪90年代微软和其他公司看到了互联的普遍需求和面向服务的普遍概念.那时,还没有被普遍接受的消息标准,结果,就没有平台.应用程序编程接口API.或者能够让开发者轻易创建面向服务的应 ...

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

    消息拓扑 消息拓扑描述的是在一个或多个发送者和接受者之间消息如何发送的.消息拓扑可以描述简单的应用-应用的连接关系,但是它同样可以描述复杂的应用-企业的连接.在后续文章里,面向服务的应用的作用会显现出 ...

  7. 《WCF技术内幕》翻译32:第2部分_第6章_通道:通道状态机(1)

    通道状态机 通道和通道工厂拥有相同的特性,这些特性独立于运行时功能.其中最重要的特性之一就是他们拥有公共的状态机.WCF程序里的每个通道和通道工厂都有一个预定义的状态集合和一个预定义的方法集合,这些方 ...

  8. 《WCF技术内幕》翻译25:第2部分_第5章_消息:创建一个消息(下)之MessageFault

    Message和SOAP Fault老徐备注1 Message类型定义了一些用来创建表示SOAP Fault消息对象的工厂方法.SOAP Fault是SOAP消息的一种形式,它用来表示错误信息.在SO ...

  9. 移动通信考前预习_第2章_蜂窝技术

    一.蜂窝的概念 1.系统级的概念:用许多小功率的发射机(小覆盖区)来代替单个的大功率发射机(大覆盖区),每个小覆盖区只提供服务范围内的一小部分覆盖. 2.不需要做技术上的重大修改,没有增加额外的频率, ...

最新文章

  1. 软件质量保证与测试文档怎么写,软件质量保证与测试整理版.pdf
  2. bugzilla dbd-mysql_在Red Hat Linux下安装配置Bugzilla
  3. 应用程序自动更新组件GeneralUpdate3.2.1发布
  4. java https soap,Java Https Soap Server(Tomcat-Axis2)
  5. win10系统:VMware无法在Windows运行该怎么办?
  6. 银行支行信息 银行卡归属地
  7. python中的随机函数的用法_python中的随机函数小结
  8. 吃核桃仁有什么好处?
  9. openssl/ssl.h,No such file or directory
  10. mysql 查询索引
  11. 用Python放一场浪漫的烟花秀!
  12. xshell的注册码
  13. 陈丹琦“简单到令人沮丧”的屠榜之作:关系抽取新SOTA!
  14. pyecharts 画雷达图
  15. AWSomeDay 中体会的Micro Service 微服务
  16. word突然不能保存只能另存为
  17. Pancake和import 语句——————————方法的重写
  18. 为什么要认真准备Java面试,编程语言排行榜告诉你
  19. LaTeX第一课:MiKTeX+Texmaker安装
  20. 浙江财经大学python_朱宗元-浙江财经大学 数据科学学院

热门文章

  1. Handler和Message详解
  2. 新手WEB开发者易出现的30个问题(转)
  3. 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合...
  4. winform窗体控件多,加载慢、卡顿的解决办法
  5. MFC笔记2(控件位置调整)
  6. #ifndef.#define, #endif 的用法
  7. C# xml文件的创建,修改和添加节点 。
  8. 剑指offer(15)反转链表
  9. 会做饭的机器人曰记_CCTV.com
  10. 基于stm32简易计算机电路图,基于STM32的简易电子计算器设计与实现(DOC).doc