一、 WSDL简介
1. 什么是WSDL
ü 是网络服务描述语言
ü 使用XML编写
ü 也可以用于定位网络服务
二、 WSDL文档
1. WSDL文档结构
WSDL文档用这些主要元素描述web service(本文中建成ws):
<wsdl:portType> ws可以执行的操作
<wsdl:message> ws使用的消息?
<wsdl:types> ws使用的数据类型
<wsdl:binding> ws使用的通讯协议
一个WSDL文档的主要结构:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions>
<wsdl:types>
……
</wsdl:types>
<wsdl:message name="settleMessageRequest">
……
</wsdl:message>
<wsdl:portType name="WebServiceClientPortType">
……
</wsdl:portType>
<wsdl:binding>
……
</wsdl:binding>
<wsdl:service name="WebServiceClient">
……
</wsdl:service>
</wsdl:definitions>
WSDL文档可以包含其他元素
WSDL types元素定义ws使用的数据类型,为了达到平台中立性,WSDL使用XML Schema语法来定义数据类型
WSDL message元素定义一个数据操作的元素,类似于函数的参数
WSDL portType元素是最重要的WSDL元素,可以描述一个ws所有可执行的操作以及相关信息,类似于函数库
WSDL Binding为每个portType定义消息格式和协议细节
2. WSDL实例
简化的WSDL文档片段
<message name=”getNameRequest”>
<part name=”term” type=”xs:string”>
</message>
<message name=”getNameResponse”>
<part name=”value” type=”xs:stirng”>
</message>
<portType name=”glossaryTerms”>
<operation name=”getTerm”>
<input message=”getNameRequest”/>
<output message=”getNameResponse”/>
</operation>
</portType>
在这个例子中,glossaryTerms为portType名称,getTerm为操作名称,getTerm拥有一个名为getNameRequest的输入消息,一个名为getNameResponse的输出消息
<message>可以定义每个message的部件part,以及相关联的数据类型
三、 WSDL端口portType
WSDL的portType描述ws所有的操作
1. 操作类型
WSDL定义了四种操作类型
One-way 此操作服务端接受消息,但不会返回响应
Request-response 服务端接受一个消息,并返回给客户端一个响应
Solicit-response 服务端发起一个请求,客户端返回一个响应 ?
Notification 服务端发送给客户端一个通知。?
2. One-way操作
<message name="newTermValues">
<part name="term" type="xs:string"/>
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="setTerm">
<input name="newTerm" message="newTermValues"/>
</operation>
</portType >
3. Request-Response 操作
<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>
4. Solicit-response操作
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name="nmtoken" parameterOrder="nmtokens">
<wsdl:output name="nmtoken"? message="qname"/>
<wsdl:input name="nmtoken"? message="qname"/>
<wsdl:fault name="nmtoken" message="qname"/>*
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
先定义output,再定义input
个人理解:client实现nmtoken方法,供server端调用。
四、 WSDL绑定
1. 绑定到SOAP
<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>
<binding type=” glossaryTerms” name=”bl”>
<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>
</soap:binding>
</binding>
binding元素有两个属性,type指示要绑定的port(函数库)glossaryTerms
soap:binding元素有两个属性,style和transport
style可以取值为document或者rpc
transport定义SOAP使用的传输协议
soap:body 的use属性可以取值为literal或者encoded
对于style和use,推荐使用document和literal
详细区别见 http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl
transport取值范围?
五、 WSDL和UDDI
略
六、 完整的WSDL语法
略