XML中的消息交互绑定类型

23 篇文章 0 订阅

   小结一下XML中的消息交互绑定类型,首先是几个概念:

 

 

先说Literal与Encoding

  • Literal就是不在SOAP消息中表明数据类型,而通过其它方式获知数据类型,这种方式是开发包相关的,没有什么标准;如<x>50</x>,单从SOAP消息,你无法判断50是数字还是字符串,而具体的类型可以在开发包将SOAP请求映射到具体的Service类时来确定并完成转换,对于返回值也一样,客户端可已通过SetReturnValueType(...)之类的方法告知开发包自己期待什么类型

  • Encoding就是在SOAP消息中携带类型信息,并且依据某种规则将数据编码传递,接收端可以根据类型信息和编码规则完成解码,获得原始数据;如<x xsi:type="xsd:string">50</x>

再看RPC与literal
在 RPC 样式中,XML 有效负载包装在 SOAP 主体中的 operation 元素内。另一方面,Document 样式的消息将 XML 有效负载直接放置在 SOAP 主体中。RPC 和 Document 消息都可以为 Literal 或 Encoded 消息。比如RPC:

RPC:

<soap:Envelope >
   ...
        <soap:Body>
      <publishSomeData>
<SomeData>
<ID>123456789</ID>
<Value>33.99</Value>
</SomeData>
      </publishSomeData>
   </soap:Body>
</soap:Envelope>

其WSDL的:

 <wsdl:binding name="PublishSomeData_Binding" type="tns:PublishSomeData">
    <soap:binding style="rpc"
     transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="publishSomeData">
      <soap:operation style="rpc" soapAction=
      "http://www.someCompany.com/soa/2005-03-06/publishSomeData"/>
      <wsdl:input>
        <soap:body use="literal" namespace=
        "http://www.someCompany.com/soa/2005-03-06/publishSomeData.wsdl"/>
        "http://www.someCompany.com/soa/2005-03-06/publishSomeData.wsdl"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" namespace=
        "http://www.someCompany.com/soa/2005-03-06/publishSomeData.wsdl"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>

在 Document-literal 样式的 SOAP 消息中,SOAP 主体仅包含 XML 有效负载,而不会包装操作名称。典型的 Document 样式 SOAP 消息与以下所示内容类似:

<soap:Envelope>
...
   <soap:Body>
<SomeData>
<ID>123456789</ID>
<Value>33.99</Value>
</SomeData>
   </soap:Body>
</soap:Envelope>

其WSDL为:

 ...
   <wsdl:binding name="PublishSomeData_Binding" type="tns:PublishSomeData">
    <soap:binding style="document"
     transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="publishSomeData">
      <soap:operation  style="document"
       soapAction=
       "http://www.someCompany.com/soa/2005-03-06/publishSomeData"/>
      <wsdl:input name="SomeData">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="returnData">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值