《WCF技术内幕》20:第2部分_第5章_消息:Message类型介绍

第5章:消息

System.ServiceModel.Channels.Message抽象类型是Microsoft Windows Communication Foundation (WCF)里通信的基本单位。尽管Message类型使用在 WCF 程序里,但是WCF的开发人员却不需要直接接触Message。因此,可以不与任 何Message的实例交互就能写出一个功能丰富的WCF程序。但是,虽然你的代码没 有直接与Message对象交互,记住WCF基础结构也在背后忙于创建、发送、接受或 者其它处理Message对象的工作。

注意本章里使用的词语,当我使用Message的时候,指的的是 System.ServiceModel.Channels.Message 类型。当我使用message,指的是发送 和接收数据的抽象概念。(老徐翻译本书的时候Message一律翻译为:Message类 型,因为它是.NET的内建类型。 message一律翻译为:消息。这里不会混淆。)

如果WCF基础结构已经为我们做了Message类型的处理工作,为什么我们还要 花费这么多时间和精力去搞明白Message类型呢?在我看来,有2个重要原因。首 先,许多WCF公共定制功能(像behaviors和encoders编码器)需要直接与 Message 类型交互。如果你不知道Message类型,这会花费更多的时间,并且你 也许会给WCF基础结构带来非常严重的后果。其次,我发现,扎实地掌握 Message类型会有效提高你对WCF的整体理解能力。在某些层次上,WCF基础结构 就是在产生、发送、接受或者处理Message对象,因此,理解 Message类型是理 解WCF内部工作机制的基础。为了使你可以扩展WCF的知识并加强你对WCF的理解 ,这一章会解释Message类型的核心功能,以及与Message对象交互的其它类型。

Message类型介绍

Message引用类型是WCF应用对SOAP消息的抽象。由于与SOAP消息如此紧密的 关系,Message类型定义了表示SOAP版本、信封、消息头、消息头块和消息体元 素的成员。和其它以XML为中心的WCF类型一样,Message类型构建于XML Infoset 之上。从作用上讲,Message类型实际是对数据存储的一个包装,并且这个数据 存储就是一个XML Infoset。

Image from book

Message类型和SOAP

Message类型和SOAP之间的关系这里需要解释一下。当Microsoft的架构师设 计WCF的时候,他们预料到XML和SOAP会成为所有消息应用的标准结构。而整个行 业也在往此方向发展。绝大部分,不是全部的话,现在的消息平台已经支持发送 和接收XML消息。许多平台把SOAP作为首要的消息结构。意识到这些问题,微软 的架构师得出SOAP和XML是首选消息结构的结论,Message类型完全支持SOAP,并 且在对象模型里封装了SOAP语义。

Message类型的结构可以轻易满足非SOAP类型的XML应用系统。Message类型能 够简单地去除SOAP消息结构而发送朴素旧的XML消息(Plain Old XML (POX) messages)。当Message类型必须适应一个非XML平台的应用系统的时候,还会有 问题产生。最显著的一个例外就是JavaScript Object Notation(JSON)。和你 名字表达的意思一样,JSON是JavaScript表示对象的一种方式,而且完全被支持 AJAX的技术兼容,像Microsoft ASP.NET AJAX。

考虑下面场景的例子:一个Web程序需要使用一个数组的值异步更新一个 drop-down list。假设这个数组的值是有页面上的另外一个控件控制。使用 Microsoft ASP.NET和ASP.NET AJAX,我们可以很简单地实现信息检索和局部刷 新页面内容。那么假如你需要从WCF来获取数据呢?这种情况下,应答消息需要 使用JSON格式的数组,而不是XML。对于这种类型的应用程序,浏览器处理XML是 非常困难和复杂的。对象渲染为JSON,换句话说,非常容易通过JavaScript传递 drop-down list的值。

咋一看,JSON好像是应用在Message类型实例上的又一个编码器,很像消息传 输优化机制(MTOM)。近距离观察,你会发现几个问题。对于初学者,JSON没有 任何XML的namespaces 和属性。我们虚构的JSON编码器需要提取XML信息。确切 地说,JSON里字符串的顺序非常重要。在XML里,schema定义了元素的顺序。如 果 schema没有要求XML消息的顺序,可能转换为等价的JSON对象就会非常的困难 。为了解决这个问题,WCF团队将会发布几个额外的类型帮助 Message类型的序 列化。

Image from book

在整个生命周期里,在传输到其它消息 参与者之前,Message对象必须经过几次转换。从发送者角度来看,这个转换包 含2个步骤:序列化和编码。Message序列化是把Message 实例转换为XML Infoset, 编码是把XML Infoset转换为特定的数据格式。从接受者角度来看, 这个转换正好与发送者相反。换句话说,接受者必须反编码接收到的数据位 Infoset,然后在反序列化Infoset为一个Message实例。

Message对象模 型更多的专注于Message的序列化和反序列化,它们中的绝大部分影响了WCF应用 程序编程接口(API)里的其它类型。因此,在研究 Message类型前,有必要知 道序列化和编码的类型。下一张我们会先看一下负责Message序列化和编码的基 本类型。此后,我们将继续详细学习 Message类型。

【老徐备注】

1. JSON(JavaScript Object Notation) 是一种轻量 级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用 了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。JSON建构于两种数据类 型:

(1)“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构 (struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

(2)值的有序列表( An ordered list of values)。在大部分语言中,它被理解为数组(array)。

参考:http://json.org/json-zh.html

2. 读音:[e:j^ks] 。 AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和 XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创 建交互式网页应用的网页开发技术。

【地 址】: http://www.cnblogs.com/frank_xl/

时间: 2024-12-28 07:16:19

《WCF技术内幕》20:第2部分_第5章_消息:Message类型介绍的相关文章

《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 打开地图文档并浏览