web service 之 SOAP(二)
SOAP 的两种通讯方式: RPC 和 Document
网上也称之为SOAP的两种风格。
一、RPC 和 Document的不同是指什么的不同?
指的是SOAP XML样式不同、生成的xml所受的约束不同、xml数据含义不同。
二、RPC 和 Document 风格的区别是什么 ?
1、面向的方面不同。
RPC: 客户端和RPC类型的WS进行交互围绕具体服务的接口。
client端:我要发送的是调用的方法名,和方法接收的参数这些数据。这些东西在传输过程中表现为xml形式。
server端:我要接收的是你请求的方法名,和发过来的各个方法的参数。
server端收到xml数据后会提取转换为对应参数值,
server端(更准确的说是被web service封装的组件)并不会直接接收处理xml文档。
Document:客户端和RPC类型的WS进行交互就是交换xml。
client端:我要发送的是个 xml文档。
server端:我要接收的是个xml文档,server端接到这个xml文档后直接处理这个xml文档。
感觉有点绕,好像没说明白。做个不太恰当比喻:
RPC是一个家国际贸易公司,从码头收到自己的集装箱后,会自己拆开集装箱取之中的货物,然后自己处理自己的货物。
Document是一家国际运输公司,从码头收到自己的集装箱后,会用卡车把这些集装箱转运到内陆地区,公司业务的处理对象就是集装箱。
2、SOAP 内容不同
RPC:对于请求来说SOAP body内容是 要调用的方法名和传入的参数--响应也类似。
请求报文例子:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:glob="http://globinch.com">
<soapenv:Header/>
<soapenv:Body>
<glob:getGreetingRequest>
<name>Binu George</name>
</glob:getGreetingRequest>
</soapenv:Body>
</soapenv:Envelope>
getGreetingRequest是要调用的方法名,name是要传的参数名,参数值是Binu George。
Document:SOAP body的内容由定义在<wsdl:type>中的xml模式指定。他不需要遵循特定的soap规范
3、xml约束
RPC:名字和参数的物理顺序必须和要调用的方法的名字和参数物理顺序一致
Document:符合预定义的Schema要求。
三、应当选择哪个 ?
1、Document方式更灵活, 更能利用xml的优势,松耦合。
2、RPC紧耦合
3、应当选择哪个?没搞太明白,这个问题还待研究