您的位置:首页 > 其它

WSDL文件结构分析

2010-10-29 19:21 477 查看
WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。 本文将详细讲解WSDL文档的结构,并分析每个元素的作用。

一:WSDL定义

WSDL是一个用于精确描述Web服务的文档,WSDL文档是一个遵循WSDL XML模式的XML文档。WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中, 由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:消息,指对交换数据的抽象描述;而端口类 型,指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联,可以定义一个端 口,而端口的集合则定义为服务。

一个WSDL文档通常包含7个重要的元素,即types、import、message、portType、operation、binding、 service元素。这些元素嵌套在definitions元素中,definitions是WSDL文档的根元素。文章的下一部分将会详细介绍WSDL 的基本结构。

二:WSDL的基本结构--概述

如第一部分最后描述的那样,一个基本的WSDL文档包含7个重要的元素。下面将分别介绍这几个元素以及他们的作用。

WSDL 文档在Web服务的定义中使用下列元素:

Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。

Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。

Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。

PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。

Binding - 特定端口类型的具体协议和数据格式规范的绑定。

Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。

Service- 相关服务访问点的集合。

三:WSDL的基本结构--详述

本节将通过一个例子详细描述WSDL文档每个元素的作用。一个简单的Web Service的WSDL文档,该服务支持名为Add的唯一操作,该操作通过在http上运行SOAP协议来实现的。包含了Request和Response的SoapHeader,Reques的SoapHeader中包含了帐号和密码等信息,可用于权限验证,Response的SoapHeader中可包含一些执行结果信息,如是否成功,错误原因等。

<?xml version="1.0"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.xxx.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Math"
targetNamespace="http://www.xxx.com">
<wsdl:types>
<xsd:schema targetNamespace="http://www.xxx.com">
<xsd:element name="RequestHeader" type="tns:RequestHeader" />
<xsd:complexType name="RequestHeader">
<xsd:sequence>
<xsd:element name="password" type="xsd:string" />
<xsd:element name="username" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="ResponseHeader" type="tns:ResponseHeader" />
<xsd:complexType name="ResponseHeader">
<xsd:sequence>
<xsd:element name="status" type="xsd:int" />
<xsd:element name="error" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="AddRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="a" type="xsd:int"></xsd:element>
<xsd:element name="b" type="xsd:int"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="AddResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="sum" type="xsd:int"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>

<wsdl:message name="RequestHeader">
<wsdl:part element="tns:RequestHeader" name="RequestHeader" />
</wsdl:message>
<wsdl:message name="ResponseHeader">
<wsdl:part element="tns:ResponseHeader" name="ResponseHeader" />
</wsdl:message>
<wsdl:message name="AddRequest">
<wsdl:part name="parameters" element="tns:AddRequest"></wsdl:part>
</wsdl:message>
<wsdl:message name="AddResponse">
<wsdl:part name="parameters" element="tns:AddResponse"></wsdl:part>
</wsdl:message>

<wsdl:portType name="Math">
<wsdl:operation name="Add">
<wsdl:input message="tns:AddRequest"></wsdl:input>
<wsdl:output message="tns:AddResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>

<wsdl:binding name="MathSOAP" type="tns:Math">
<soap:binding style="document" mce_style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="Add">
<soap:operation
soapAction="http://www.xxx.com/Math.php" />
<wsdl:input>
<soap:header message="tns:RequestHeader" part="RequestHeader"
use="literal" />
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:header message="tns:ResponseHeader" part="ResponseHeader"
use="literal" />
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>

<wsdl:service name="Math">
<wsdl:port binding="tns:MathSOAP" name="MathSOAP">
<soap:address
location="http://www.xxx.com/Math.php" />
</wsdl:port>
</wsdl:service>

</wsdl:definitions>


1、definitions元素

所有的WSDL文档的根元素均是definitions元素。该元素封装了整个文档,除了提供一个命名空间外,该元素没有其他作用。

2、types元素
WSDL采用了W3C XML模式内置类型作为其基本类型系统。types元素用作一个容器,用于定义XML模式内置类型中没有描述的各种数据类型。当声明消息部分的有效负载时,消息定义使用了在types元素中定义的数据类型和元素。

3、import元素
import元素使得可以在当前的WSDL文档中使用其他WSDL文档中指定的命名空间中的定义元素。本例子中没有使用import元素。通常在用户希望模块化WSDL文档的时候,该功能是非常有效果的。

4、message元素
message元素描述了Web服务使用消息的有效负载。message元素可以描述输出或者接受消息的有效负载;还可以描述SOAP文件头和错误detail元素的内容。定义message元素的方式取决于使用RPC样式还是文档样式的消息传递。

5、portType元素
portType元素定义了Web服务的抽象接口。该接口有点类似Java的接口,都是定义了一个抽象类型和方法,没有定义实现。在WSDL中, portType元素是由binding和service元素来实现的,这两个元素用来说明Web服务实现使用的Internet协议、编码方案以及 Internet地址。

6、binding
binding元素将一个抽象portType映射到一组具体协议(SOAP和HTTP)、消息传递样式、编码样式。通常binding元素与协议专有的元素和在一起使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: