WSDL解析

来源:互联网 发布:windows的桌面是指 编辑:程序博客网 时间:2024/06/05 04:19

原文:http://www.cnblogs.com/artech/archive/2009/12/20/1628170.html

WSDL,全称Web服务描述语言(Web Service Description Language),是采用XML格式的形式对Web服务的描述。WSDL将一个Web服务定义成一组终结点的集合,而每一个终结点包含一系列基于消息(Message)的操作(Operation)。这些抽象的操作和消息最终和相应的协议以及消息格式绑定。

虽然W3C在2007年6月份就正式出台了WSDL 2.0版本,并将其作为官方推荐,但是该版本并没有得到广泛的推广,并没有被主流的厂商完全支持。如今,WCF完全支持的还是WSDL 1.1版本,所以接下来我们将针对这个版本对WSDL作一个简单的介绍,对于希望了解WSDL1.1的读者可以从后面的地址下载官方文档:http://www.w3.org/TR/wsdl。就WSDL描述对象的性质,我们大体可以将所有WSDL的元素划分为以下两类:

  • 抽象元素:比如通过XSD表示的数据类型;用于承载数据信息的消息;通过对关联的消息按照某种消息交换模式组合而成的操作等;
  • 具体元素:比如将相应的操作和具体的网络协议和消息格式进行绑定等。

为了有效地了解WSDL的结构,我们首先来看看一段直接从官方文档上拷贝出来的WSDL文档:

标准的WSDL文档,从中我们可以看出它由五个子元素构成:Type、Message、PortType、Binding和Service。这五大元素构成一个了一个完成得WSDL,现在可以就对它们逐个进行介绍。

1、Types:通过XSD表示的数据类型的集合

WSDL并没有属于自己的数据类型定义规范,而是直接采用XSD作为数据定义的语言。上面的WSDL文档通过XSD定义了两个XML元素,元素名称分别为TradePriceRequest和TradePrice,命名空间为http://example.com/stockquote.xsd。从XSD的定义我们不难看出,这两个类型分别是字符串和浮点数类型。

2、Message: 通信数据的载体

Web服务采用基于消息的通信方式,所以消息是通信数据的载体。WSDL的message元素用于定义所有定义终结点操作的消息的结构。WSDL的消息是一个具有唯一标识(通过Name属性)的XML元素,通常利用Types结点中定义的数据类型来描述。上面的WSDL定义了两个消息,名称分别为GetLastTradePriceInput和GetLastTradePriceOutput,消息主体部分的结构通过引用定义在Types结点中的XML元素的有效名称(QName:命名空间+本地名称)。

3、PortType:相关操作的集合

一个服务逻辑上有一系列关联的操作组成,从消息交换的角度上讲,操作进行关联的消息按照相应的消息交换模式的有机组合。WSDL的PortType表示的就是这么一个操作的集合,反映在XML结构上,就是一组operation元素的基本。每一个operation XML元素代表一个单一的操作,它通过一个或者多个消息组合而成。消息的不同组合方式反映了操作采用的不同消息交换模式(MEP: Message Exchange Pattern)。上面给出的WSDL通过如下的XML片断定义了一个仅仅包含一个操作的PortType。

4、Bindings:消息、操作与协议、格式的绑定

上面介绍WSDL的三个元素主要从抽象的角度对数据类型、消息和操作进行描述,要创建服务于具体消息交换场景的终结点,还需要将这需抽象的描述和具体的消息格式(Format)和网络协议绑定,比如SOAP、HTTP-GET和MIME等。

在这里,我们很有必要强调“终结点”,本节我们提到的终结点在大部分场景中都是指与技术无关的、用于进行消息交换的“端口”。而我们WCF中提到的终结点,可以看成是这样一个通用的终结点在具技术平台中的实现。WCF的终结点由地址、绑定和契约构成,结合WSDL我们不难看出,Type、Message和PortType是对契约的描述。而绑定,就其语言和功能上讲,就是实现了抽象的描述和具体的协议(网络传输协议、SOAP和WS-*规范等)之间的绑定。在WSDL中,Bindings元素具有一样的功能。

在WSDL中,我们可以通过很多绑定扩展实现与某种协议的绑定,而最为常见的是基于SOAP 1.1和SOAP 1.2的绑定。上面给出的WSDL中定义了一个典型的基于SOAP 1.1的绑定(SOAP 1.1和SOAP 1.2绑定的命名空间分别为http://schemas.xmlsoap.org/wsdl/soap/和http://schemas.xmlsoap.org/wsdl/soap12/)。

5、Service:相关终结点的集合

由于一个Web服务最终以终结点的方式暴露出来,所以WSDL最终体现在对终结点集合的描述,这里介绍的WSDL最后一个元素<Service/>本质上就是对基于该Web服务的一组相关终结点的定义。我们照例将上面给出的WSDL的Service相关部分提取出来,根据具体的例子分析Service结点应有的结构。

WSDL5个元素之间的关系。对于表示一个终结点对象<port>元素来说,它具有一个地址(Address)和关联着一个绑定(Binding),而绑定对象关联着一个PortType。而一个PortType实际上对应的着WCF中的契约(Contract)。所以,WCF下的终结点由地址、绑定和契约三要素组成在这里也得到进一步的反映,实际上,WCF本身就是按照WS开放标准设计的。

 

 

 

 


 

0 0
原创粉丝点击