《WCF技术内幕》21:第2部分_第5章_消息:WCF XML Stack 和 XmlDictionary

WCF XML Stack

Microsoft .NET Framework为了多种用途的XML处理定义了一个丰富的类型集 合。作为一个消息平台,WCF比其他.NET应用需要的正常功能还要多。例如,你 在第2章:“面向服务”里看到的一样,WCF能够产生、发送、接受、处理二进制 或者MTOM编码的XML消息。因为.NET Framework没有提供这些功能,WCF API自己 定义类型来实现这些功能,我们可以使用这些类型与Message类型直接交互。换 句话说,WCF API 定义的类型可以转换Message类型到一个特定编码格式。在 System.Runtime.Serialization.dll程序集的WCF System.Xml命名空间下,有三 个关键的类型定义它们负责序列化和编码Message类型:XmlDictionary、 XmlDictionaryWriter和XmlDictionaryReader。为了讨论尽可能地简单,我讲使 用XML消息片段来阐述这些类型,而不是使用完全格式的SOAP消息。在本章的后 面部分,你会看到这些类型是如何来序列化和编码Message类型的。

XmlDictionary类型【老徐备注1】

如它的名字的含义一样,一个XmlDictionary对象是许多对key-value的映射 。很像字典或者词汇表,XmlDictionary可以用来替代简单的表达式而不会丢失 任何含义。我们在日常生活里经常使用这种机制,但是我们却意识不到它的存在 。考虑下面我说给朋友Rusty的话:“我昨晚看了一部关于潜水艇的电影。” Rusty将会听到这个消息并且做如下解释“我昨晚看了一部关于能在水面和水下 航行的容器的电影。”第一句话比第二句话简单明了的多,它需要较少的表达时 间。这个压缩和相关处理时间可以节省,因为我和Rusty共享一个词汇表。只要 Rusty和我明白相同的词语,我们两个就可以高效地沟通。如果我对 Rusty说: “这章经过苦思冥想(elucubration)终于完成了,”他估计不知道我在说什么 。在这个例子里,我为了节约时间用了一个Rusty 不知道的单词。因此,一个所 有的参与者都知道的字典(或者是个词汇表)会提高效率。

冒着把这个比喻搞死的风险,另外有一点它也可以证明。当我对Rusty说,“ 我昨晚看了一部潜水艇的电影,”整个句子本身可以使用几种不同的方式和语言 表达。如果你知道电影(movie)和潜水艇(submarine)的意思,你或许脑子里 可以想想到这样的场景,黝黑的剧场里(或许可以闻到5块钱一通的爆米花香) 另外还有荧幕上潜水艇的身影。话句话说,句子里的这些话激起了现实世界里的 一些画面。就XML Infoset和编码而论,你可以映射XML Infoset到真实世界里的 “事物”,你也可以把这些话转换为特定的编码。

在消息应用里,XmlDictionary也许被用来压缩序列化和编码过的消息大小, 因此可以减小需要发送的消息占用的带宽。正如人们在高效地交流以前必须有一 个公共的词汇表一样,发送者和接受者在消息交换的时候必须使用兼容的 XmlDictionary对象。从内部来看,XmlDictionary定义了一个私有的可以表示 SOAP消息里元素名字、属性和XML namespace声明的key-value对列表。

在直接使用XmlDictionary以前,我们有必要详细研究一下XmlDictionary实 例里存储的数据。XmlDictionary内部存储的key-value对是 XmlDictionaryString类型的。一个XmlDictionaryString 类型定义的是一个 Int32的Key属性和一个String类型的值。尽管XmlDictionaryString定义了共有 的构造函数。 XmlDictionaryString也不是由用户代码直接创建,而是通过增加 XmlDictionaryString对象到 XmlDictionary实例里。(我们会在本节的后面部 分看到XmlDictionaryString的例子。)

XmlDictionary定义了一个无参的构造函数,还有一个很少使用的构造函数, 这个构造函数可以接受表示最大XmlDictionaryString 元素个数的Int32数字。 在构造实例结束以后,XmlDictionaryString可以通过调用实例的Add方法加入到 XmlDictionary 里。Add方法接受一个String类型,返回一个 XmlDictionaryString实例,如下所示:

XmlDictionary dictionary = new XmlDictionary();
List<XmlDictionaryString> stringList = new  List<XmlDictionaryString>();
// add element names to the dictionary and store in  stringList
stringList.Add(dictionary.Add("ReleaseDate"));
stringList.Add(dictionary.Add("GoodSongs"));
stringList.Add(dictionary.Add("Studio"));

时间: 2024-09-24 04:13:53

《WCF技术内幕》21:第2部分_第5章_消息:WCF XML Stack 和 XmlDictionary的相关文章

《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技术内幕

<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技术爱好者.翻译工作对我个人也是一次新的尝试,希望这本书的翻译 能给大家的学习带来帮助.另外如有技术问题或翻译不当,都可以留言交

ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一个全面的了解,接下来在本章中,将通过一个案例来熟悉ArcGIS for Desktop的使用,从解决问题的过程中,逐渐适应ArcGIS桌面的界面和操作方式. 本章的练习数据是一个住宅小区的简单平面示意图,需要在已有的基础上把楼房的轮廓补充完整,并加以整饰,完成一幅地图. 1.1 打开地图文档并浏览

ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区 1 用ArcMap制作地图 作为ArcGIS for Desktop的组成部分之一,ArcMap用于数据的浏览.编辑.显示.查询.地图排版等.ArcMap和ArcCatalog一起构成了完整的数据处理与管理分析的功能.在前一章中已经介绍了ArcCatalog的使用,本章中将介绍ArcMap的使用.本章的例子依然使用第4章里的小区平面图示例,但是将从原理的角度做更加