一、 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語法
略