转(对WebService "style" "use"消息格式的理解)

前段时间部署了几个WebService接口,发现XFire的services.xml文件有这么两标签,"style"和"use",很好奇他们有什么用处。就去找了些资料。资料不太好找,但基本还是搞清楚了。

简单地说style和use其实是WSDL声明服务是如何绑定到消息协议的。我们知道WSDL是用来描述服务接口的,也是用来告诉客户端该如何生成SOAP消息的。style和use不同,客户端生成的SOAP消息就不一样,服务端的返回的SOAP消息格式也会不一样。这说的比较抽象,不要紧,耐心点看下去。

首先我们要搞清楚,services.xml是XFire这个框架自己的配置文件,跟WSDL是不一样的
XFire关于这两标签的定义如下:
<style>document|rpc|message|wrapped</style>
<use>literal|encoded</use>
事实上XFire的use标签目前只支持literal值。详细可看参考资料[1]。

以上两标签使用的值不一样,XFire为接口动态生成的WSDL就不一样,而WSDL的style只有Document和RPC两种取值,XFire多出来的那几种值其实是一种组合方式,例如wrapped就是Document+wrapped,Document就是Document+nowrapped.

写到这里,老毛病又犯了,懒了,不太想写了,呵呵。下面直接贴一些例子吧:
RPC+Encoded SOAP Message:
<soap:envelope>
<soap:body>
<myMethod>
<x xsi:type="xsd:int">5</x>
<y xsi:type="xsd:float">5.0</y>
</myMethod>
</soap:body>
</soap:envelope>

RPC+Literal SOAP Message:
<soap:envelope>
<soap:body>
<myMethod>
<x>5</x>
<y>5.0</y>
</myMethod>
</soap:body>
</soap:envelope>

看出来了没,Encoded和Literal的差别就在于参数类型的定义。

Document nowrapped + Literal SOAP Message:
<soap:envelope>
<soap:body>
<xElement>5</xElement>
<yElement>5.0</yElement>
</soap:body>
</soap:envelope>

Document wrapped + Literal SOAP Message:
<soap:envelope>
<soap:body>
<myMethod>
<x>5</x>
<y>5.0</y>
</myMethod>
</soap:body>
</soap:envelope>

看到区别了没,一个有方法名,一个没有。

一般情况来说,Document wrapped + Literal是最适用的,这也是大部分框架给出的默认值。
参考资料[2] [3]有相当详细的比较,有兴趣的朋友可以自己去看看。

参考资料:
[1] services.xml Reference
[2] Which style of WSDL should I use?
[3] wsdl:binding "style", "use", and message format
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值