以前一直没留意这个问题,今天再次复习了下,摘录了BLOGJAVA上一位兄弟的文章,总结的不错,现收藏之。
就是所谓RPC与Document或者Wrapped,Literal与Encoding
先说Literal与Encoding
-
Literal就是不在SOAP消息中表明数据类型,而通过其它方式获知数据类型,这种方式是开发包相关的,没有什么标准;如<x>50</x>,单从SOAP消息,你无法判断50是数字还是字符串,而具体的类型可以在开发包将SOAP请求映射到具体的Service类时来确定并完成转换,对于返回值也一样,客户端可已通过SetReturnValueType(...)之类的方法告知开发包自己期待什么类型
-
Encoding就是在SOAP消息中携带类型信息,并且依据某种规则将数据编码传递,接收端可以根据类型信息和编码规则完成解码,获得原始数据;如<x xsi:type="xsd:string">50</x>
再看看RPC与Document
<envelope><body><myMethod><x>5</x><y>8</y></myMethod></body></envelope> (RPC/Literal)
<envelope><body><myMethod><x type=string>5</x><y type=int>8</y></myMethod></body></envelope> (RPC/Encoded)
|
<types> <schema> <element name="xElement" type="xsd:int"/> </schema> </types>
<message name="myMethodRequest"> <part name="x" element="xElement"/> </message> <message name="empty"/>
<portType name="PT"> <operation name="myMethod"> <input message="myMethodRequest"/> <output message="empty"/> </operation> </portType>
则对应的SOAP消息如下:
<soap:envelope> <soap:body> <xElement>5</xElement> </soap:body> </soap:envelope>
然而这种方式没有在SOAP消息中包含操作名,所以如果两个不同的操作具有相同的输入,开发包有可能无法决定把请求转发到哪个函数,为避免这种情况,开发包一般为每个操作的输入输出都产生具有唯一名称的Element,不管它们是否内容相同;或者作为开发者,你可以选择 Wrapped 风格
|
<types> <schema> <element name="myMethod"/> <complexType> <sequence> <element name="x" type="xsd:int"/> </sequence> </complexType> </element> </schema> </types> <message name="myMethodRequest"> <part name="parameters" element="myMethod"/> </message> <message name="empty"/>
<portType name="PT"> <operation name="myMethod"> <input message="myMethodRequest"/> <output message="empty"/> </operation> </portType>
对应的SOAP消息:
<soap:envelope> <soap:body> <myMethod> <x>5</x> </myMethod> </soap:body> </soap:envelope>
这种方式也具有明显的弱点:无法方便的处理重载,因为XML Schema不允许定义相同名称的元素;这样,即使你的后台编程语言支持函数重载,你也应该尽量避免使用
|
分享到:
相关推荐
- **RPC/Encoded**:此样式将方法名映射为SOAP消息中的根元素,同时在SOAP消息中编码参数类型信息。WSDL示例中展示了`<soap:body use="encoded" ...>`,表示使用编码方式。这意味着服务调用看起来像远程过程调用,...
而在 SOAP 1.2 中,这个信息被移到了 SOAP 消息的体中去了。 第三,SOAP 1.1 和 SOAP 1.2 的命名空间(Namespace)不同。SOAP 1.1 使用 "http://schemas.xmlsoap.org/soap/envelope/" 作为命名空间,而 SOAP 1.2 ...
2. **SOAP Encoding Style**: `soap:encodingStyle`属性指定了SOAP消息中数据类型的编码方式。在这个例子中,它引用了W3C的SOAP编码风格规范。 3. **SOAP Body**: `<soap:Body>`元素包含SOAP消息的主要内容,即实际...
在IT行业中,SOAP(Simple Object Access Protocol)是一种用于交换结构化信息的标准协议,常用于Web服务。它基于XML,提供了一种在不同应用程序之间交换数据的统一方式。本篇文章将详细探讨如何使用“soap-build”...
SOAP设计的主要目的是在分散或分布式环境中提供一种轻量级、结构化的信息交换机制。SOAP协议不涉及具体的编程模型或特定语义的实现,而是通过定义标准组件的包模型和数据编码规则,使得它能应用于多种系统,从消息...
在IT行业中,尤其是在Web服务开发领域,SOAP(Simple Object Access Protocol)是一种常见的用于交换结构化信息的协议。它基于XML,常用于实现分布式系统之间的通信。本教程将围绕标题和描述中的关键知识点展开,...
当涉及到Web Service客户端与服务器之间的交互时,有时需要在SOAP消息中添加额外的信息,例如身份验证或安全凭证,这就是SOAP Header的作用。SOAP Header是SOAP Envelope的一部分,它允许扩展和自定义消息处理。 在...
SOAP(Simple Object Access Protocol)是一种轻量级协议,用于在分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义了一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 SOAP 的...
Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <SOAP-ENV:Header> ... </SOAP-ENV:Header> <SOAP-ENV:Body> ...
thinkphp内使用soap 把下载的soap解压放到ThinkPHP\Extend\Vendor目录下 名字是soap 调用方法: function test($url,$method,$data){ vendor('soap.class#nusoap'); //从soap目录导class.nusoap.php类文件 $...
SOAP是一种基于XML的协议,用于在分布式环境中交换结构化和类型化的信息。在本场景中,我们将探讨如何使用MFC结合gSoap库来完成这一过程。 首先,我们来看SOAP服务端的实现。在MFC中,可以使用CInternetServer类...
**SOAP(Simple Object Access Protocol)协议**是一种基于XML(Extensible Markup Language)的协议,用于在Web服务中传递结构化和类型化的信息。SOAP允许应用程序通过HTTP、SMTP等传输协议进行通信,使得不同系统...
总结来说,`laravel-soap`为Laravel开发者提供了便捷的SOAP协议客户端支持,使得在Laravel项目中集成和调用SOAP服务变得更加简单。通过理解SOAP协议的基本概念和`laravel-soap`的使用方式,开发者可以更好地实现跨...
SOAP(Simple Object Access Protocol)是一种基于XML的协议,主要用于在分布式环境中进行结构化和类型化信息的对等交换。SOAP 1.2是其一个重要版本,由W3C(World Wide Web Consortium)发布,旨在提供一种简单且轻...
2. **SOAP动作**:SOAP动作是SOAP消息中的一个可选元素,它提供了关于请求操作的信息,帮助服务端识别客户端所请求的具体操作。 3. **WSDL(Web Services Description Language)**:SOAP Toolkit 3.0支持WSDL,这...
相比之下,SOAP服务的安全控制通常涉及更复杂的XML消息验证和处理,因为所有的业务逻辑和安全信息都封装在SOAP消息中。这可能导致在现有的HTTP代理服务器上实现安全策略时遇到困难,因为代理可能无法直接解析和处理...
在iOS开发中,SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于交换结构化信息。它被广泛用于Web服务,允许应用程序通过HTTP发送和接收数据。本篇将深入探讨如何在iOS应用中实现SOAP请求。 一、...
SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在Web服务中交换结构化和类型化的信息。SOAP请求是Web服务交互的核心,它允许客户端发送数据到服务端,并接收响应。本工具专为测试SOAP请求及查看其...