基于SOAP协议的Web服务的消息路由机制
时间:2007-03-09 来源:pascal4123
基于SOAP协议的Web服务的消息路由机制
朱燕1 黄皆雨2
(1华南理工大学 电子与信息学院,广东 广州 510640; 2华南理工大学 电子与信息学院,广东 广州 510640)
摘 要:SOAP主体是专用于交换调用的具体信息,可以通过在SOAP 头插入不同的标准化的SOAP头条目来完成不同目的的控制功能。WS-Routing和WS-Referral正是使用这种方法来达到控制SOAP路由的规范。这两个规范正交交互,给SOAP提供了一个完善的消息环境。文章最后给出了WS-Routing和WS-Referral消息交互的例子。
关键词:SOAP ,Web服务路由,Web服务指引
中图分类号:TP393.03
Message routing mechanism in SOAP-based Web Service
ZHU Yan1, HUANG Jie Yu2
(1Detp. of Electronic and Information ,South China University of Technology, Guangzhou 510640, China ;2 Detp. of Electronic and Information ,South China University of Technology, Guangzhou 510640, China)
Abstract: .SOAP Body is used to exchange transferred information, it can be completed different aimed control function through inserting SOAP item in SOAP header. WS-Routing and WS-Referral is the specifications which exactly used this method to control the SOAP routing. The two specifications are orthogonal alternative, they provide SOAP a perfect message environment.
Key Word: SOAP, Web Service routing, Web service referral
1. Web 服务的原理
Web服务是随着信息网络的发展,为了解决网络中各个系统之间的互连互操作问题而产生的。Web服务解决了在不同平台,不同开发语言,不同的协议之间如何进行安全的互操作的问题。WEB服务相当于一个标准化的抽象层,任何支持WEB服务的语言都可以访问应用程序提供的功能,实现了跨语言兼容;由于WEB服务基于标准化接口,同时也实现了跨平台功能;WEB服务彼此松散耦合,具有互操作性。WEB服务通过SOAP协议调用方法, SOAP定义了基于XML包装传递信息和将与平台相关的应用数据类型转换为XML表示的一些规则
2. SOAP 协议
SOAP简单对象访问协议是一种使用可扩展标记语言(XML)来定义的规范,是一个在分布式环境传递消息使用的轻量级协议,通过它可以在两个不同系统之间实现消息传递。SOAP是平台独立的,安全性高的。正是它的优点,使得基于SOAP的Web服务具有了上述的特点。
SOAP协议主要包括SOAP消息的组成,SOAP的编码规则,SOAP远程过程调用以及SOAP协议绑定框架等。SOAP非常灵活,可以绑定在HTTP,FTP,SMTP等协议之上。
SOAP实际上是XML的一个应用,SOAP传递的是XML消息。SOAP消息是一个XML文件包括SOAP封套,SOAP报头和SOAP主体。
SOAP封套(envelope)对SAOP信息进行封装,包含了XML名称空间信息。SOAP报头(header)是一个可选对象,SOAP报头并不会在SOAP信息的传输路径中的每个接收者之间都进行传递,接收者收到报头之后将插入自己的报头信息再继续往下传递到再下一个接收者。当SOAP数据包从上一个接收者传递到下一个接收者,SOAP报头的actor属性的值将应作出修改,actor的值实际是SOAP传输路径中下一站的URI(统一资源标记符)。
SOAP主体(body)是SOAP 封套的子元素,它包括了要发送的实际信息。只要合乎XML语法的内容都可以作为主体。
以下是SOAP消息的一个例子:
env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<n:alertcontrol xmlns:n="http://example.org/alertcontrol">
<n:priority>1</n:priority>
<n:expires>2001-06-22T14:00:00-05:00</n:expires>
</n:alertcontrol>
</env:Header>
<env:Body>
<m:alert xmlns:m="http://example.org/alert">
<m:msg>Pick up Mary at school at 2pm</m:msg>
</m:alert>
</env:Body>
</env:Envelope>
3.Web服务的路由
SOAP定义目标是简单和可扩展的。 SOAP的扩展主要体现在SOAP能够任意定义自己传递的消息结构和能够与任何网络协议绑定传输。SOAP是一个轻量级的协议,提供在分布式分散环境进行的消息传递。SOAP协议是简单的,它并不提供SOAP消息是如何传输的定义,而使用它所绑定的HTTP或其他协议自身所具有的消息路径模型。SOAP消息不仅仅只是在两个或三个主机之间传递。在电子商务中,完成一项交易需要传递多个SOAP消息才能完成。但是,每条消息的传递路径怎么选择并没有在SOAP中定义。
WS-Routing是一个无状态协议,它扩展了SOAP协议,使用SOAP扩展,在SOAP消息结构内部提供了描述消息路径的方法。这个路径将从消息源,经过若干中介,最后到达消息的最终接收者。假设消息路径如图1所示:
图1 SOAP消息的传递路径
SOAP只是规定了消息的接收者,并没有规定消息传递过程中所使用的路径。这里使用一个例子来说明SOAP消息的路由机制。
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<m:path xmlns:m="http://schemas.xmlsoap.org/rp/">
<m:action>http://www.im.org/chat</m:action>
<m:to>soap://D.com/some/endpoint</m:to>
<m:fwd>
<m:via>soap://C.com</m:via>
</m:fwd>
<m:rev>
<m:via/>
<m:via m:vid="cid:[email protected]"/>
</m:rev>
<m:from>mailto:[email protected]</m:from> <m:id>uuid:84b9f5d0-33fb-4a81-b02b-5b760641c1d6</m:id>
</m:path>
</S:Header>
<S:Body>
...
</S:Body>
</S:Envelope>
这是一个从中介B发出,到达C的消息。ws-routing 头消息的基本元素包括:actor:表示接收者可以接收的那部分消息;path :定义了消息路径,其子元素包括:to:代表消息的最终接收者;from:代表消息源;fwd:代表正向消息路径;rev:代表反向消息路径;via:表示消息将经由的节点。消息源A没有必要知道所有的消息路径,消息路径是在传递中动态建立的,每传递一个节点,fwd所包含的via节点将被删除或重写,rev的via节点(如果有的话)将增加。除了消息源和最终接收者,消息经过的所有节点都被称为中介(intermediary),中介节点有以下特征:可以作为发送者(sender)和接收者(receiver);它担任了代理(proxy)和消息隧道(tunnel)的角色。
前向消息传递,遵循以下原则:
1 消息源产生一个path头来表示该消息所携带有消息路径信息,同时,消息源产生to元素来说明消息的最终接收者,如果没有定义to元素的接收者,则以它定义的fwd元素中的子元素via为下一接收者。
2 当接收者收到消息就检查ws-routing消息头,先检查fwd元素的via元素的值如果via没有值就检查to元素的值,都没有值就报错;如果via有值,接受者则去掉最上面的一个via元素,如果再没有其他via元素和to元素,则该接收者就是最终接收者。
3 如果接收者不是最终接收者而是中介节点,则还要在rev元素增加一个via值,作为反向路径节点;再根据fwd元素下一个via的值或者to元素的值(如果via没有值的话)把消息传递给下一个接收者。
反向消息传递遵循以下原则:
反向消息路径是可选的,是在消息前向传递的时候动态建立的。中介节点不能够删除或插入rev元素。反向路径同时可以作为另一消息的前向路径来传递消息。
Web服务路由规范(WS-Routing)使得SOAP不必绑定到别的应用层协议都可以描述消息路径。但是,如果SOAP协议绑定到HTTP,SMTP等协议之上,也可以通过传输层协议TCP和UDP协议进行消息传递。
WS-Routing并不定义任何关于传输可靠性和消息重发的策略。期望可以有其他基于SOAP消息传输可靠性的协议来实现消息传输的可靠性,保证端到端的服务质量。
4 Web服务指引规范
Web服务指引规范(WS-Referral)是一个基于SOAP的无状态协议,用来插入,删除和排队SOAP路由器的入口。SOAP路由器可以看作是一个支持WS-Routing协议的SOAP节点 。WS-Referral是与Web服务路由协议(WS-Routing)相正交的协议,它提供了如何配置SOAP路由器以建立一个消息路径的方法,而WS-Routing则提供了描述消息实际路径的机制。
WS-Referral同样也不提供消息安全,路径描述和服务发现等功能,这些功能都将由其他Web 服务规范提供。
WS-Referral声明的元结构包括以下基本元素:
1 for :表示指引声明所要匹配的消息节点名字。
2 go :确定符合条件的SOAP路由器,通过这一系列的路由器来发送SOAP消息。
3 if: 描述了指引的接收者必须理解的一组条件,只有理解了这样一组条件,指引才能被使用
4 ttl: 表示WS-Referral声明的存活时间,超过该期限声明无效。
5 refid :指引的唯一标记符,用来识别指引的表现形式
6 desc : 描述附加信息。
7 invalidates : 表示声明无效的标志符。
WS-Referral声明有三种消息交换模式:
1 查询消息交换 :SOAP路由器可以通过发送WS-Referral请求从其他路由器上得到WS-Referral声明,最简单的例子就是从他路由器上得到新的或者更新路由信息。
WS-Referral请求有两个元素:query标志该消息是一个WS-Referral请求;for表示一系列被请求的SOAP角色。
WS-Referral请求响应也有两个元素:queryResponse标志该消息是一个WS-Referral请求响应;ref表示与该请求相匹配的WS-Referral声明。
2 注册消息交换:SOAP路由器可以通过发送一个注册消息来确定一个WS-Referrals声明是否能够被其他SOAP路由器所接受。
WS-Referral注册消息有两个元素:register标志该消息是一个WS-Referral注册消息;ref包含了需要注册的WS-Referral声明。
WS-Referral注册消息响应元素有:registerResponse标志该消息是一个WS-Referral注册消息的响应。
3 指引头交换:将指引添加到现存的消息交换流中。元素:referrals标志一个WS-Referral头。
5.WS-Routing 消息传递的一个例子
以图1所标示的传递路径为例,从A发送WS-Routing消息到B, WS-Routing消息如下所示:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<m:path xmlns:m="http://schemas.xmlsoap.org/rp/">
<m:action> http://www.notification.org/update </m:action>
<m:to>soap://B.com </m:to>
<m:from>soap://A.com</m:from>
<m:id>mid:[email protected] </m:id>
</m:path>
</S:Header>
<S:Body>
...
</S:Body>
</S:Envelope>
如果A接到WS-Referral声明如下
<r:ref xmlns:r="http://schemas.xmlsoap.org/ws/2001/10/referral">
<r:for>
<r:prefix>soap://B.com</r:prefix>
</r:for>
<r:if/>
<r:go>
<r:via>soap://C.com</r:via>
</r:go>
<r:refId>mid:[email protected]</r:refId>
</r:ref>
则下一个从A出发到B的消息为:
<S:Envelope xmlns:S="http://www.w3.org/2001/09/soap-envelope">
<S:Header>
<m:path xmlns:m="http://schemas.xmlsoap.org/rp/">
<m:action>http://www.notification.org/update</m:action>
<m:to>soap://B.com</m:to>
<m:fwd>
<m:via>soap://C.com</m:via>
</m:fwd>
<m:from>soap://A.com</m:from>
<m:id>mid:[email protected]</m:id>
</m:path>
</S:Header>
<S:Body>
...
</S:Body>
</S:Envelope>
从中我们可以看出WS-Routing消息和WS-Referral消息交互的过程,以及WS-Referral消息对WS-Routing消息路径的影响。WS-Referral消息导致WS-Routing消息的发送者来添加一个附加结点到向前路径中去,就是在向前路径的"via"元素中增加一个结点"soap://C.com"。
6.结论
SOAP协议没有定义一个在消息传递路径中SOAP消息的发送者和接收者,一般来说,SOAP消息是依靠它所绑定的下层协议来进行路由选择。WS-Routing提供了描述整个SOAP消息路径的机制,它允许静态或者动态插入SOAP路由;但是WS-Routing没有提供路由器的配置和动态路由构造,这个功能由WS-Referral来提供。WS-Routing和WS-Referral是正交的,他们给SOAP提供了一个完善的消息环境,但是WS-Referral可被用于其他消息传递模式,WS-Routing也可以被用在除了WS-Referral之外的其他路由配置机制。
参考文献:
[1] SOAP Version 1_2 Part 1 Messaging Framework,[S]
URL:http://www.w3.org/TR/2003/REC-soap12-part1-20030624/,2003
[2] SOAP Version 1_2 Part 2 Adjuncts,[S] URL:http://www.w3.org/TR/2003/REC-soap12-part2-20030624/,2003
[3] Robert Tabor 著, 徐继伟 英宇 等 译, .NET XML Web服务,[M],机械工业出版社 2002.5
[4] Web Services Routing Protocol (WS-Routing) [S]
URL:http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-routing.asp,2001
[5] Web Services Referral Protocol (WS-Routing) [S]
URL:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/ws-referral.asp,2001
作者简介:朱燕(1977-),女,广东清远人,硕士生,主要研究方向:信息网络与技术
作者联系地址更改,邮寄请寄往:
广东省佛山市顺德区大良东苑后街3巷16号,528300