文档样式和RPC样式通信有什么区别?

Amr*_*rin 91 rpc soap wsdl web-services jax-ws

有人可以向我解释Document和RPC风格的webservices之间的区别吗?除了JAX-RPC之外,下一个版本是JAX-WS,它支持Document和RPC样式.我也理解文档样式webservices是用于异步通信的,其中客户端在收到响应之前不会阻塞.

无论哪种方式,使用JAX-WS我当前使用@Webservice注释服务,生成WSDL,并从该WSDL生成客户端工件.

收到工件后,在两种样式中,我都会在端口上调用方法.现在,这在RPC样式和文档样式上没有区别.那有什么区别,这种差异在哪里可见?

同样,SOAP over HTTP与HTTP上的XML有何不同?毕竟SOAP也是带有SOAP命名空间的XML文档.

09Q*_*534 95

有些机构可以解释一下Document风格和RPC风格的webservices之间的区别吗?

有两种通信样式模型用于将WSDL绑定转换为SOAP消息体.它们是: Document&RPC

使用Document样式模型优点是,只要SOAP消息体的内容是任意XML实例,您就可以以任何方式构造SOAP体.Document样式也称为面向消息的样式.

但是,对于RPC样式模型,SOAP请求正文的结构必须包含操作名称和方法参数集.RPC样式模型假定消息体中包含的XML实例的特定结构.

此外,有两种编码使用模型,用于将WSDL绑定转换为SOAP消息.它们是: 文字和编码

使用文字使用模型时,正文内容应符合用户定义的XML架构(XSD)结构.优点是双重的.例如,您可以使用用户定义的XML模式验证消息体,此外,您还可以使用XSLT之类的转换语言转换消息.

使用(SOAP)编码的使用模型,消息必须使用XSD数据类型,但消息的结构不必符合任何用户定义的XML模式.这使得很难验证消息体或在消息体上使用基于XSLT的转换.

不同样式和使用模型的组合为我们提供了四种不同的方法来将WSDL绑定转换为SOAP消息.

Document/literal
Document/encoded
RPC/literal
RPC/encoded
Run Code Online (Sandbox Code Playgroud)

我建议您阅读本文题为我应该使用哪种WSDL样式?作者:Russell Butek对不同的样式和使用模型进行了很好的讨论,将WSDL绑定转换为SOAP消息,以及它们的相对优势和劣势.

一旦收到工件,在两种通信方式中,我都会在端口上调用方法.现在,这在RPC样式和文档样式上没有区别.那有什么区别,这种差异在哪里可见?

您可以找到差异的地方是"响应"!

RPC风格:

package com.sample;

import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style=Style.RPC)
public interface StockPrice { 

    public String getStockPrice(String stockName); 

    public ArrayList getStockPriceList(ArrayList stockNameList); 
}
Run Code Online (Sandbox Code Playgroud)

第二个操作的SOAP消息将具有空输出,如下所示:

RPC样式响应:

<ns2:getStockPriceListResponse 
       xmlns:ns2="http://sample.com/">
    <return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Run Code Online (Sandbox Code Playgroud)

文件样式:

package com.sample;

import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style=Style.DOCUMENT)
public interface StockPrice {

    public String getStockPrice(String stockName);

    public ArrayList getStockPriceList(ArrayList stockNameList);
}
Run Code Online (Sandbox Code Playgroud)

如果我们为上述SEI运行客户端,则输出为:

123 [123,456]

此输出显示在Web服务和客户端之间交换ArrayList元素.此更改仅通过更改SOAPBinding注释的style属性来完成.具有更丰富数据类型的第二种方法的SOAP消息如下所示,以供参考:

文件样式响应:

<ns2:getStockPriceListResponse 
       xmlns:ns2="http://sample.com/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xsi:type="xs:string">123</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xsi:type="xs:string">456</return>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Run Code Online (Sandbox Code Playgroud)

结论

  • 正如您在两个SOAP响应消息中注意到的那样,在DOCUMENT样式的情况下可以验证SOAP响应消息,但在RPC样式的Web服务中则不行.
  • 使用RPC样式的基本缺点是它不支持更丰富的数据类型,而使用Document样式的缺点是它以XSD的形式带来了一些复杂性,用于定义更丰富的数据类型.
  • 使用其中一种的选择取决于操作/方法要求和预期的客户.

同样,SOAP over HTTP与HTTP上的XML有何不同?毕竟SOAP也是带有SOAP命名空间的XML文档.那么这里的区别是什么?

为什么我们需要像SOAP这样的标准?通过HTTP交换XML文档,两个程序可以交换丰富的结构化信息,而无需引入其他标准(如SOAP)来明确描述消息信封格式和编码结构化内容的方法.

SOAP提供了一个标准,因此开发人员不必为他们想要提供的每个服务创建自定义XML消息格式.给定要调用的服务方法的签名,SOAP规范规定了明确的XML消息格式.任何熟悉SOAP规范的开发人员,使用任何编程语言,都可以为特定服务制定正确的SOAP XML请求,并通过获取以下服务详细信息来了解服务的响应.

  • 服务名称
  • 服务实现的方法名称
  • 每种方法的方法签名
  • 服务实现的地址(表示为URI)

使用SOAP简化了将现有软件组件公开为Web服务的过程,因为服务的方法签名标识了用于请求和响应的XML文档结构.


Bin*_*rge 23

RPC样式的Web服务使用方法的名称及其参数来生成表示方法的调用堆栈的XML结构.文档样式表示SOAP正文包含一个XML文档,可以根据预定义的XML模式文档进行验证.

一个很好的起点:SOAP绑定:Document和RPC Style Web Services之间的区别


Pre*_*raj 20

在WSDL定义中,绑定包含操作,这里是每个操作的样式.

Document:在WSDL文件中,它指定具有内联或导入XSD文档的类型详细信息,该文档描述了由松散耦合的那些服务方法交换的复杂数据类型的结构(即模式).文档样式是默认的.

  • 优势:
    • 使用此Document样式,我们可以根据预定义的模式验证SOAP消息.它支持xml数据类型和模式.
    • 松散耦合.
  • 缺点:理解起来有点困难.

在WSDL类型中,元素如下所示:

<types>
 <xsd:schema>
  <xsd:import schemaLocation="http://localhost:9999/ws/hello?xsd=1" namespace="http://ws.peter.com/"/>
 </xsd:schema>
</types>
Run Code Online (Sandbox Code Playgroud)

架构从外部引用导入.

RPC:在WSDL文件中,它不创建类型模式,在消息元素中它定义了名称和类型属性,这使得紧密耦合.

<types/>  
<message name="getHelloWorldAsString">  
<part name="arg0" type="xsd:string"/>  
</message>  
<message name="getHelloWorldAsStringResponse">  
<part name="return" type="xsd:string"/>  
</message>  
Run Code Online (Sandbox Code Playgroud)
  • 优点:易于理解.
  • 缺点:
    • 我们无法验证SOAP消息.
    • 紧密耦合

RPC: WSDL中没有类型
Document: Types部分将在WSDL中可用


Tar*_*ary 7

使用JAX-WS RPCDocument样式的主要方案 如下:

  • 远程过程调用(RPC)当消费者观看Web服务作为一个单一的逻辑应用程序或组件与封装的数据被用于图案.请求和响应消息直接映射到过程调用的输入和输出参数.

    RPC模式的此类示例可能包括支付服务或股票报价服务.

  • 基于文档的模式用于消费者将Web服务视为较长时间运行的业务流程的情况,其中请求文档表示完整的信息单元.这种类型的web服务可以涉及人工交互,例如与信用申请请求文档一起,其中响应文档包含来自贷款机构的出价.由于较长时间运行的业务流程可能无法立即返回所请求的文档,因此基于文档的模式更常见于异步通信体系结构中.SOAP的Document/literal变体用于实现基于文档的Web服务模式.