最新的Web開發教程
 

XML WSDL


  • WSDL是Web服務描述語言
  • WSDL用於描述Web服務
  • WSDL是XML編寫
  • WSDL是從2007年6月26日W3C推薦

WSDL文檔

一個WSDL文檔描述Web服務。 它指定的服務的位置,和該服務的方法,使用這些主要元素:

元件 描述
<types> 定義(XML Schema)由Web服務所使用的數據類型
<message> 定義每個操作的數據元素
<portType> 描述了可進行與所涉及的消息的操作。
<binding> 定義的協議和數據格式的每個端口的類型

WSDL文檔的主要結構是這樣的:

<definitions>

<types>
  data type definitions........
</types>

<message>
  definition of the data being communicated....
</message>

<portType>
  set of operations......
</portType>

<binding>
  protocol and data format specification....
</binding>

</definitions>

WSDL示例

這是一個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>

在本實施例的<portType>元素定義"glossaryTerms"作為名稱port ,和"getTerm"作為名稱operation

"getTerm"操作具有input message被稱為"getTermRequest"和一個output message被稱為"getTermResponse"

<message>元素定義了parts的每個消息和相關的數據類型。


<portType>元素

所述<portType>元素定義a web service ,該operations可以被執行,並且messages所涉及。

請求 - 響應類型是最常見的操作的類型,但WSDL定義了四種類型:

類型 定義
One-way 操作可以接收消息,但不會返回響應
Request-response 該操作可以接收一個請求並返回一個響應
Solicit-response 該操作可以發送一個請求,將等待響應
Notification 操作可以發送消息,但不會等待響應

WSDL單向操作

單向操作示例:

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

在上面的例子中,端口類型"glossaryTerms"定義了一個名為單向操作"setTerm"

"setTerm"操作允許使用一個新的術語表的信息輸入"newTermValues"消息,輸入參數"term""value" 。 但是,沒有輸出的操作定義。


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>

在上面的例子中,端口類型"glossaryTerms"定義稱為請求-響應操作"getTerm"

"getTerm"操作需要稱為輸入消息"getTermRequest"了一個名為參數"term" ,並返回稱為輸出消息"getTermResponse"一個參數叫做"value"


WSDL綁定到SOAP

WSDL綁定定義了Web服務消息格式和協議細節。

請求 - 響應操作示例:

<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="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的屬性(you can use any name you want)定義了綁定的名稱, type屬性指向的端口綁定,在這種情況下, "glossaryTerms"端口。

soap:binding元素有兩個屬性-風格和運輸。

style屬性可以是"rpc""document" 。 在這種情況下,我們使用的文件。 的transport屬性定義了SOAP協議使用。 在這種情況下,我們使用HTTP。

operation元素定義端口類型暴露的每個操作。

每個操作對應的SOAP動作已被定義。 您還必須指定輸入和輸出是如何進行編碼。 在這種情況下,我們使用"literal"