1. WSDL 是什么
WSDL 指网络服务描述语言 (Web Services Description Language)。 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
2. WSDL 文档结构
WSDL
文档是利用这些主要的元素来描述某个 web service 的:
元素
|
定义
|
<portType>
|
最重要的 WSDL 元素,它可描述一个 web service可被执行的操作以及相关的消息。
可以把 <portType> 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。
|
<message>
|
用于描述一个操作的数据元素。每个消息均由一个或多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。
|
<types>
|
web service 使用的数据类型定义。为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。
|
<binding>
|
web service 使用的通信协议元素。为每个端口定义消息格式和协议细节。
|
一个 WSDL 文档的主要结构
l 抽象定义
Types
独立与机器和语言的类型定义
Messages 包括函数参数(输入与输出分开)或文档描述
PortTypes
引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)
2 具体定义
Bindings
PortTypes部分的每一操作在此绑定实现
Services
确定每一绑定的端口地址
文档形式为:
<definitions>
<types>
definition of types........
</types>
<message>
definition of a message....
</message>
<portType>
definition of a port.......
</portType>
<binding>
definition of a binding....
</binding>
</definitions>
WSDL
文档可包含其它的元素,比如 extension 元素,以及一个 service 元素,此元素可把若干个 web services 的定义组合在一个单一的 WSDL 文档中。
2.1.WSDL文档实例
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
2.2.message和portType元素
在这个例子中,
<portType>
元素把
"glossaryTerms"
定义为某个端口的名称,把
"getTerm"
定义为某个操作的名称。操作
"getTerm"
拥有一个名为
“
getTermRequest
”
的输入消息,以及一个名为
"getTermResponse"
的输出消息。
<message>
元素可定义每个消息的部件,以及相关联的数据类型。
对比传统的编程,
glossaryTerms
是一个函数库,而
"getTerm"
是带有输入参数
"getTermRequest"
和返回参数
getTermResponse
的一个函数。
2.3.bind元素
<binding type="glossaryTerms" name="b1">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<operation>
<soap:operation
soapAction="http://example.com/getTerm"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
binding
元素有两个属性
name
属性和
type
属性。
name
属性定义
binding
的名称,而
type
属性引用
portType
,在这个例子中是
"glossaryTerms"
端口。
soap:binding 元素有两个属性 style 属性和 transport 属性。
style 属性可取值 "rpc" 或 "document"。在这个例子中我们使用 document。transport 属性定义了要使用的 SOAP 协议。在这个例子中我们使用 HTTP。
operation
元素定义了每个端口提供的操作符。对于每个操作,相应的
SOAP
行为都需要被定义。同时您必须如何对输入和输出进行编码(
use
属性)。在这个例子中我们使用了
"literal"
。