[zt]SOAP风格中 RPC与Document的区别

大部分 Web 服务都是围绕着远程过程调用而构建的,而 WSDL 规范允许另外一种 Web 服务体系结构:文档样式(document style)。在该体系结构中,整个文档在服务客户端和服务器之间进行交换。
在 WSDL规范中隐含着一个非常巧妙的转换开关,它可以将 Web 服务的 SOAP 绑定从远程过程调用转换成 pass-through 文档。在 SOAP 协议绑定中的样式属性可以包含这两个值中的一个:rpc或document。当属性被设定为文档样式时,客户端知道应该使用XML模式而不是远程过程调用约定。本文将提供对这个 WSDL 转换开关的说明,描述它的好处,并将解释应该何时使用 pass-through 文档。
首先,让我们简要地谈谈 WSDL 的一些要点,来理解这个巧妙的转换是如何发生的。 WSDL 是一项 XML 规范,它被用来描述Web服务以及对于到达端点(服务)的协议相关的需求。WSDL 用抽象术语来描述服务;通过可扩展的绑定定义,它能够为使用具体术语调用服务定义协议和数据格式规范。下面的语法是直接从 WSDL 规范中摘录出来的,展示了在绑定中所包含的可扩展性元素:

<wsdl:definitions …. >
    <wsdl:binding name=”nmtoken” type=”qname”> *
        <– extensibility element (1) –> *
        <wsdl:operation name=”nmtoken”> *
           <– extensibility element (2) –> *
           <wsdl:input name=”nmtoken”? > ?
               <– extensibility element (3) –>
           </wsdl:input>
           <wsdl:output name=”nmtoken”? > ?
               <– extensibility element (4) –> *
           </wsdl:output>
           <wsdl:fault name=”nmtoken”> *
               <– extensibility element (5) –> *
           </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>
</wsdl:definitions>
 
WSDL 规范通常描述三种绑定扩展HTTP GET/POST、MIME 以及 SOAP version 1.1。HTTP GET/POST 和 MIME 中定义的绑定扩展用来定义与标准的 Web 应用程序进行通信的需
求,这些应用程序可能返回(也可能不返回)XML 文档。在发送或返回 XML 文档时,HTTP GET/POST 绑定的扩展是隐式的文档样式。
SOAP 绑定扩展用来定义支持 SOAP 信封协议的服务。SOAP 信封是一种简单模式,它设计成能包含 XML 消息,提供特定于应用程序的消息头和消息体。SOAP 绑定的扩展使 WSDL 文档能够声明 SOAP 消息的需求,这样应用程序就能够与服务正确通信。SOAP 扩展允许将 SOAP 消息的样式声明为文档或 RPC。如果在soap:binding元素中声明了样式属性,那么该样式将成为所有没有显式声明的样式属性的soap:operation元素的缺省值。如果在soap:binding元素中没有声明样式属性,那么缺省的样式就是文档。下面是文档样式的显式声明:
Continue reading “[zt]SOAP风格中 RPC与Document的区别”

XML-RPC是什么东西?

XML-RPC是什么东西?
在Java的世界里,我们听说了JAX-RPC其实就是XML-RPC的一个Java的实现方法。Apache也有相应的xmlrpc实现 – ws-xmlrpc。还有基于kxml上的kxmlrpc
简单的说Web Service就是http+xml,http说明他的传输媒介,xml则是传输协议的格式。所以我们有时候会说Webservice有两种:SOAP和XML-RPC.
这两者都不和任何一种语言或者服务器有关系,你完全可以用不同的服务器端和客户端实现。区别仅仅在于:
SOAP是一个完整的XML DOCUMENT,也是为什么有的人说SOAP是Document Style.有WSDL来作为描述语言,同时又完备的对象xml映射的定义。而XMLRPC则是XML但未必是一个完备的DOCUEMNT,他的主要目标就是 – 简单。可以看看他的spec

所以这么看Webservice不是什么神乎其神的东西,可以说涉及到http和xml的远程调用都可以称作Webservice。当然有可能你没有使用SOAP和XML-RPC而发明了自己的协议。但,它仍然是Webservice。

–2009-3-3
在web端xml有可能被json取代哟。json的表达更简单(不过有人觉得有点抽象),而且现在也有xml->json的工具。看得出来在轻量级的web调用上,json会携手php, “ajax”s的各种框架成为主流。