Welcome

首页 / 软件开发 / WCF / 《WCF技术内幕》翻译10:第1部分_第2章_面向服务:填写消息地址

《WCF技术内幕》翻译10:第1部分_第2章_面向服务:填写消息地址2011-05-28 博客园 译:Frank Xu Lei填写消息地址

现在我们已经看过了与消息交互的实体,详细剖析了消息结构,然后看了一 下WCF 提供了几个消息编码器,现在我们来看一下如何在详细发送的时候表示我 们要发送的目的地。毕竟,除非能发送给接受者,否则消息等于是毫无用处。和 邮政服务需要一个良好格式的地址结构一样,面向服务的消息同样也需要一个定 义良好的地址结构。这节里,我们将会建立自己的地址结构(Scheme),看它可 以不可以广泛适用于所有的消息应用系统,然后把它关联到那个和WCF消息一起 使用的地址结构上。

在传输里标记地址VS在消息里标记地址

面向服务的消息直接在消息里指定最终接受者。这是一个微不足道但是非常 重要的问题。如果消息目标在消息里指定,一个完整的消息模式集合成为可能。 你将会在第3章《消息交换模式、拓扑和编排》里学习到关于消息模式的更多知 识。

当我们直接把地址插入到消息时,我们在为更高效的消息处理做准备。效率 可以指代许多东西,在这个意义上,与创建消息的速度相反,我正在讲的是实现 一个更先进的消息发送行为的容易性。和写个信封地址需要花费时间一样,序列 化地址到消息里也需要耗费时间。无论如何,写地址到信封上会改善邮政服务的 效率,序列化地址到消息里改善处理效率,特别当更高级的消息发送行为要实现 (像消息路由和中介者)。

指定最终接受者

那什么类型条目应该放到地址里呢?对于发起者,地址应该可以标识消息的 最终接受者。因为最终接受者可能托管多个服务,所以我们应该有一个方式可以 唯一地区别最终接受者上的服务。一个地址元素也能够描述托管服务的最终接受 者和服务本身。看一下下面的例子:

http://wintellect.com/OrderService

Internet时期,我们知道,地址由最终接受者的地址和我们可以使用的访问 协议组成。因为大SO消息是SOAP消息,我们需要构造一些SOAP消息来传达信息。

我们知道SOAP消息包含3种类型的元素:信封、包含多个消息块的消息头和消 息体。消息信封不是一个好的选择,因为信封元素只能出现一次。选择只有消息 头和消息体可以作为候选了。所以消息体怎么样?从我们早期的讨论,我们知道 消息体只是给最终的消息接受者使用的。经过排除过程以后,消息头里可以给我 们提供包含地址的逻辑空间。这样消息头块看起来会是什么样子?这样如何:

<Envelope>
<Header>
<To>http://wintellect.com/OrderService</To>
</Header>
<Body> …</Body>
</Envelope>

更高层次上,这个简单的XML结构达到了我们标识最终接受者和我们要发送的 服务的目的。

指定初始发送者

在消息里加入发送者信息也许有用,就像信件上的退信地址。增加发送者信 息有2个目的:为最终接受者指出发送者,为中介者指出发送者。我们已经看到 URL可以用来鉴别消息。所以事实上我们可以使用相同的结构来标识发送者。例 子如下:

<Envelope>
<Header>
<To>http://wintellect.com/ReceiveService</To>
<From>http://wintellect.com/SendService</From>
</Header>
<Body> …</Body>
</Envelope>

给SOAP增加简单的元素来支持消息的来源,这个可以既可以被中介者也可以 被最终接受者使用。