现在的位置: 首页 > 综合 > 正文

为Web Service提供新的能力-WS-Addressing 学习笔记

2013年10月19日 ⁄ 综合 ⁄ 共 1533字 ⁄ 字号 评论关闭
WS-Addressing的产生原因
我理解认为有三点:请求和回复使用不同的传输协议;异步的信息交互方式;提供有状态的对话方式的Web Service。这三个要求都是随着企业应用发展对Web Service提出的新的需求。
 
协议的要点
WS-Addressing提供了一种可以使得服务消费者(cosumer)和服务发布者(provider)之间进行对话的机制。这种机制对于大多数开发者来说,只需要简单的配置就可以了。对于Web Service容器的提供方需要实现这个规范的细节。
 
协议中有两个新的概念:端点引用(Endpoint reference)和SOAP 结构的 消息信息(message information,MI)头。这两个概念对于我们理解WS-Addressing的实现有意义,实际开发过程中不会涉及到这两个概念。如果感兴趣,可以使用一些Web Service或者网络Sniffer之类的工具查看SOAP报文。
端点引用(EPR)
端点引用可以理解为提供一个服务回调的机制,这个机制的最简单的形式是一个XML元素包装的URL。通过这个引用,客户应用端可以知道下一次该和哪个服务实例对话。
 
消息信息头(MI header)
Web 服务寻址(WS-Addressing)规范定义了一些附加的(当然,也是标准的)SOAP 头,它们应该用于帮助传送关于消息的信息。 
WS-Addressing实例
在CXF里面提供了一个基于WS-Addresing的例子,可以供大家学习使用。
安装完CXF,在cxf目录下有个samples/ws-addressing的目录,按照readme.txt指导编译执行就可以了。CXF配置WS-addressing是比较简单的,只要在CXF的配置文件中加入如下配置:
<cxf:bus>
        <cxf:features>
            <wsa:addressing/>
        </cxf:features>
    </cxf:bus>
在例子里面,客户端Client.java是通过hello_world_addr.wsdl来获取服务器端地址,然后因为客户端开启了ws-addressing,所以服务器会回调在client.xml里面的
 <http:conduit name="{http://apache.org/hello_world_soap_http}SoapPort.http-conduit">
<http:client DecoupledEndpoint="http://localhost:9990/decoupled_endpoint"/>
</http:conduit>
这个地址完成调用过程。
就可以使用CXF提供WS-Addressing的功能了。在有兴趣专研的朋友,可以看看CXF的源代码研究一下WS-Addressing的实现。
作为WS-Addressing的发起者,BEA的weblogic提供对该协议的支持还是比较早的,9.1版本后就支持这个规范了。10版本支持的说明的链接如下:
在BEA Web Service的异步调用模型中提到了对该协议的应用。不过对于该规范支持的配置细节,我还没有查到。
 
参考文章
后一篇文章写的很好,只不过例子是微软环境下的。

抱歉!评论已关闭.