《WCF技术内幕》27:第2部分_第5章_消息:使用消息头(上)

使用消息头

正如你在第二章里看到的一样,消息头块被SOAP消息基础结构用来表示地址 、路由和安全信息。因为WCF也是一个完全支持SOAP的消息处理基础结构,它包 含一些创建、序列化和分析SOAP消息头块的工具。记住Message类型是一个 SOAP 消息的CLR抽象,它定义的成员允许WCF基础结构使用发送或接受到的消息头块。 Message 类型的Headers属性提供了这个功能。和WCF里其它关键的类型一样,使 用Headers属性需要我在WCF API里与其它类型交互,即MessageHeader、 MessageHeaders和EndpointAddress 类型。这些类型的名字已经暗示了他们的作 用。例如,MessageHeader是对SOAP消息头块的泛型CLR抽象;MessageHeaders, 广义上说,是一组MessageHeader对象;EndpointAddress是对WS-Addressing endpoint规范的CLR抽象。具体使用的时候,这些类型提供了给Message插入、序 列化、编码、反序列化、解码消息头块,以及从反序列化的消息头块里提取信息 的能力。本节,我们将会研究这些基本类型,以及如何和Message一起使用。

MessageHeader类型

WCF里SOAP消息头的基本构建单位就是MessageHeader类型,它的对象模型和 Message 类型很像。与Message一样,MessageHeader是抽象类,它暴露了几个返 回MessageHeader子类型实例的工厂方法。 MessageHeader类型也定义了几个通 过XmlWriter或者XmlDictionaryWriter序列化MessageHeader内容的方法。

创建一个MessageHeader对象

MessageHeader类型上定义的几个CreateHeader工厂方法。每个工厂方法接受 一组参数,但是表示消息头块的name (String)、namespace (String)和 value (Object)的三个参数一直存在。其它参数允许我们自定义序列化器,还有其它 SOAP消息头块的属性如mustUnderstand、actor和relay。下面代码演示了如何创 建一个简单的带有WS-Addressing 规范里定义的MessageID 的MessageHeader对 象:

String WSAddNS =  "http://www.w3.org/2005/08/addressing";
MessageHeader header = MessageHeader.CreateHeader ("MessageID",
  WSAddNS, new UniqueId().ToString());
Console.WriteLine(header.ToString());

The following output is generated when this code executes:

运行结果如下:

<MessageID  xmlns="http://www.w3.org/2005/08/addressing">
  urn:uuid:
</MessageID>

注意到为了创建序列化为WS-Addressing MessageID (本例中使用String)消 息头块的MessageHeader 对象,必须知道XML namespace和MessageID的name。你 ,我是不知道,但是我是不愿意记住WS-*规范里的一对消息块name.WCF架构师也 有相同的感受,他们已经为我们提供了创建符合WS-*规范的消息头块的方式。本 书里我们会看到这几种方式,本章里的“MessageHeaders类型”一节就会讲到这 些内容。

这里要着重指出的是外貌可以构建表示自定义的消息头块的MessageHeader对 象,它不需要遵循WS-* 规范。例如,在消息发送到另一个消息参与者之前,订 单处理系统或许要增加一个名为PurchaseOrderInfo的消息头块到Message上。因 此,从前面的例子看出,我们可以简单地改变XML namespace、消息头块的name 和消息头块的值来满足程序的需求。

MessageHeader header = MessageHeader.CreateHeader ("PurchaseOrderDate",
  "http://wintellect.com/POInfo", DateTime.Now);
Console.WriteLine(header.ToString());
This code generates the following output:

代码输出结果如下:

<PurchaseOrderDate  xmlns="http://wintellect.com/POInfo">
  2007-01-12T09:18:52.020824-04:00
</PurchaseOrderDate>

备注:正如你将在第九章里看到的,WCF基础结构可以使用消息契约为我们做 这些工作。当我们使用这种简单、不易出错的方法时,WCF基础结构会执行类似 前面的代码。同样要重点指出的是MessageHeader本身没什么价值,想赋予其任 何意义,我们需要在Message对象里引用这个对象。你会在本章后面的 “MessageHeaders类型“一节里详细学习这些内容。

时间: 2024-09-16 09:23:03

《WCF技术内幕》27:第2部分_第5章_消息:使用消息头(上)的相关文章

《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章里的小区平面图示例,但是将从原理的角度做更加