`
liugang594
  • 浏览: 981837 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

应该使用哪一种WSDL的style呢?

阅读更多

一个WSDL描述了一个Web Service。一个WSDL binding描述了这个service是怎么绑定到一个消息协议上的,特别的如SOAP消息协议。WSDL SOAP绑定可以是一个RPC(Remote Procedure Call)样式的绑定,也可以是一个document样式的绑定。SOAP绑定也可以有一个encoding use或一个literal use。因此我们有了四种style/use模式:

  1. RPC/encoded
  2. RPC/literal
  3. Document/encoded
  4. Document/literal

再加上document/literal wrapped pattern,当创建一个WSDL文件时就有了五种可选的样式了。那么应该选择哪一个呢?

 

这里说一点:RPC和document仅仅是一种术语,并不像他们的词义那些来进行区分的。它仅仅指出应该怎么把一个WSDL的binding转换成一个SOAP的message,没有更多的东西,你可以随便使用哪种。

 

同样的,encoding和literal也只是在WSDL到SOAP的mapping的时候有用。

 

下面我们就开始讨论这五种不同的样式对。首先我们先假设有一个方法:

public void myMethod(int x, float y);

 

 

RPC/encoded

 

这个方法对应的WSDL应该如下:

<message name="myMethodRequest">
    <part name="x" type="xsd:int"/>
    <part name="y" type="xsd:float"/>
</message>
<message name="empty"/>

<portType name="PT">
    <operation name="myMethod">
        <input message="myMethodRequest"/>
        <output message="empty"/>
    </operation>
</portType>

<binding .../>  
<!-- I won't bother with the details, just assume it's RPC/encoded. -->

 

 

这里要注意的就是假设binding使用的RPC/encoded样式对。当基于这个wsdl转换时,它对应的soap消息应该如下样:

<soap:envelope>
    <soap:body>
        <myMethod>
            <x xsi:type="xsd:int">5</x>
            <y xsi:type="xsd:float">5.0</y>
        </myMethod>
    </soap:body>
</soap:envelope>

 有以下几点需要留意:

 

优点:

  • 直观
  • 操作名出现在消息中,这就很容易进行操作分配

缺点:

  • 类型信息会降低传输性能
  • 不能很容易的验证这个消息
  • RPC/encoded并不是一个WS-I兼容的      

RPC/literal

 

先看wsdl:

<message name="myMethodRequest">
    <part name="x" type="xsd:int"/>
    <part name="y" type="xsd:float"/>
</message>
<message name="empty"/>

<portType name="PT">
    <operation name="myMethod">
        <input message="myMethodRequest"/>
        <output message="empty"/>
    </operation>
</portType>

<binding .../>  
<!-- I won't bother with the details, just assume it's RPC/literal. -->

 

这里使用的样式对是RPC/literal。对应的soap消息如下:

<soap:envelope>
    <soap:body>
        <myMethod>
            <x>5</x>
            <y>5.0</y>
        </myMethod>
    </soap:body>
</soap:envelope>

 这里去掉了类型信息。

 

优点:

  • 直观
  • 操作名也存在
  • 类型信息去除掉了
  • 是一个WS-I兼容的

缺点:

  • 无法容易的进行有效的验证

Document/encoded

没有人使用这种样式对,因此不讨论

 

Document/literal

 首先我们先看下面的wsdl定义

<types>
    <schema>
        <element name="myMethod">
            <complexType>
                <sequence>
                    <element name="x" type="xsd:int"/>
                    <element name="y" type="xsd:float"/>
                </sequence>
            </complexType>
        </element>
        <element name="myMethodResponse">
            <complexType/>
        </element>
    </schema>
</types>
<message name="myMethodRequest">
    <part name="parameters" element="myMethod"/>
</message>
<message name="empty">
    <part name="parameters" element="myMethodResponse"/>
</message>

<portType name="PT">
    <operation name="myMethod">
        <input message="myMethodRequest"/>
        <output message="empty"/>
    </operation>
</portType>

<binding .../>  
<!-- I won't bother with the details, just assume it's document/literal. -->

 

对应的Soap消息如下:

<soap:envelope>
    <soap:body>
        <myMethod>
            <x>5</x>
            <y>5.0</y>
        </myMethod>
    </soap:body>
</soap:envelope>

 

这个消息看起来有点像RPC/literal的soap消息。但是他们有不同。在RPC/literal消息中的myMethod是来自操作名,而这里的myMethod来自元素名。

 

对于一个document/literal pattern wrapped样式对,有一点基本的特征:

  • 每个input message只会有一个part
  • 这个part还是一个element
  • 这个element名和operation名一样
  • element只有子元素没有属性

这种样式的优点如下:

  • 没有type信息
  • 每个在soap:body里定义的内容都来自一个schema
  • 你又可以得到operation名了
  • 它是一个WS-I兼容的,并且符合WS-I中soap:body只有一个子元素的约束

缺点:

  • wsdl看起来更复杂了

 

分享到:
评论

相关推荐

    简单WSDL实例

    WSDL,全称为Web Services Description Language,是用于描述Web服务的一种XML格式。它定义了服务的接口,包括服务提供的操作、消息格式、通信协议以及服务的位置。WSDL文件是Web服务客户端和服务提供者之间进行交互...

    WebService描述语言WSDL详解

    总结来说,WSDL是Web服务的核心组成部分,它提供了一种标准的语言,使得服务的发布者和使用者能够理解和使用Web服务,促进了SOA(面向服务架构)环境中的互操作性。通过WSDL,开发人员可以创建和消费跨越不同平台和...

    wsdl文件详解 web wervices

    WSDL通常与SOAP(Simple Object Access Protocol)结合使用,SOAP是一种基于XML的协议,用于在Web服务中传递信息。WSDL描述了SOAP消息应该如何构建,而SOAP提供了消息的实际内容和处理机制。 **4. WSDL的使用场景**...

    wsdl文件解读

    WSDL就是这样一种语言,它允许开发者明确地定义服务的输入、输出、操作和绑定,使得服务可以被自动发现和使用,减少了人工介入和错误的可能性。 WSDL文件的结构通常分为抽象定义和具体定义两大部分: 1. 抽象定义...

    WSDL 文件及其属性

    本篇文章将深入探讨WSDL文件的几个关键属性,包括`elementFormDefault`、style/use组合以及指定SoapAction的方式。 首先,我们来看`elementFormDefault`属性。这个属性决定了XML实例文档中元素的命名空间处理方式。...

    Web Service描述语言 WSDL 详解(转)

    WSDL通常与简单对象访问协议(SOAP)一起使用,SOAP是一种基于XML的消息传递协议,用于在Web服务中传输数据。WSDL描述了服务如何通过SOAP进行通信,包括SOAP消息的结构和发送方式。 ### 3. WSDL的使用场景 - **...

    java的wsdl语言实现web service的服务创建和调用实例

    WSDL(Web Services Description Language)是用于定义Web Service接口的一种XML格式,它详细描述了服务的位置、提供的操作以及如何调用这些操作。在本实例中,我们将探讨如何使用Java和WSDL来创建和调用Web Service...

    wsdl的描述

    WSDL,全称Web Services Description Language,是一种XML格式的规范,用于描述Web服务及其接口。它是Web服务客户端和服务提供者之间的桥梁,使得服务消费者能够理解如何与服务进行交互。下面我们将深入探讨WSDL的...

    Web Services 教程

    Web services 有两种类型的应用 7 Web Services 平台元素 8 什么是 SOAP? 8 什么是 WSDL? 8 什么是UDDI? 8 Web Service 实例 9 一个实例:ASP.NET Web Service 9 要运行这个例子,我们需要一个 .NET 服务器 10 ASP...

    JDK6 webservice的应用(注意SOAPBinding.Style不同的差异)

    在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同系统之间通过互联网交换数据。Java开发者经常使用JDK(Java Development Kit)中的工具来创建和消费Web服务,特别是在JDK6时期,它提供了对Web服务的强大...

    C# .NET 动态调用webservice的三种方式.pdf

    **第一种方式:使用`ServiceDescription`和`ServiceDescriptionImporter`** 1. **下载WSDL**:通过HTTP请求从目标URL获取WSDL数据,这通常可以通过`WebClient`或`HttpClient`类完成。 2. **解析WSDL**:使用`...

    使用php搭建webService服务器(代码实例)

    WSDL(Web Service Description Language)是一种基于 XML 的语言,用于描述 Web Service 的接口和行为。WSDL 文件定义了 Web Service 的接口、操作、消息和数据类型,提供了一个统一的方式来描述 Web Service。 ...

    php soap 实用例子

    在IT行业中,PHP SOAP(Simple Object Access Protocol)是一种用于不同应用程序之间进行远程调用和交换数据的协议。SOAP允许开发者使用XML格式传输数据,使得不同编程语言和平台之间的互操作性变得更为简单。本篇...

    Web Service学习

    2. **WSDL (Web Services Description Language)**:WSDL是一种XML格式,用于描述Web Service的接口,包括服务的位置、服务的操作、输入和输出参数以及消息格式等。WSDL文件是公开发布的,使得客户端能够了解如何与...

    C# .NET 动态调用webservice的三种方式.docx

    在.NET框架中,动态调用Web服务是一种灵活的方法,尤其在处理未知服务或者需要在运行时根据需求调用不同服务的场景下。本文将详细解释三种动态调用Web服务的方法,重点聚焦于C#编程环境下。 1. **通过WSDL下载和...

    C#.NET动态调用webservice的三种方式.doc

    在C#.NET中,动态调用Web Service是一个高级技巧,主要适用于那些在程序运行时需要与未知服务交互的情况。...总的来说,动态调用Web Service是一种灵活但复杂的技术,适合在特定场景下提高代码的适应性和可扩展性。

    Web Service学习笔记.doc

    Web Service 是一种能够在不同计算机间的不同语言编写的应用程序系统中,通过网络通讯实现函数和方法调用的能力,而 SOAP 协议是 web service 的主体,它通过 HTTP 或者 SMTP 等应用层协议进行通讯,自身使用 XML ...

Global site tag (gtag.js) - Google Analytics