WSDL學習筆記

一、            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>

在這個例子中,glossaryTermsportType名稱,getTerm爲操作名稱,getTerm擁有一個名爲getNameRequest的輸入消息,一個名爲getNameResponse的輸出消息

<message>可以定義每個message的部件part,以及相關聯的數據類型

三、            WSDL端口portType

WSDLportType描述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元素有兩個屬性,styletransport

style可以取值爲document或者rpc

transport定義SOAP使用的傳輸協議

soap:body use屬性可以取值爲literal或者encoded

對於styleuse,推薦使用documentliteral

詳細區別見 http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl

transport取值範圍?

五、            WSDLUDDI

六、            完整的WSDL語法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章