WSDL設計繼承了以XML為基礎的當代Web技術標準的開放設計理念。它允許通過擴展使用其它的類型定義語言(不光是XMI Schema),允許使用多種網絡傳輸協議和消息格式(不僅是在規范中定義的SOAP/HTTP、HTTP-GET/POST及MIME等)。WSDL也應用了當代軟件工程中的復用理念,分離了抽象定義層和具體部署層,使得抽象定義層的復用性大大增加。
1、 SOAP綁定
WSDL包括用于SOAP 1.1終端的綁定,此綁定支持下列協議信息規范:
需要指示出此綁定是針對SOAP 1.1協議的。
為SOAP 終端指定地址的方式。
用于SOAPAction HTTP頭的URI,而此頭是綁定了SOAP 的HTTP頭。
作為SOAP封裝一部分傳送的頭列表定義。
SOAP綁定使用下列擴展元素對WSDL進行擴展:(注意黑體標注)
<definitions .... >
<binding .... >
<soap:binding style="rpc|document" transport="uri"> …1
<operation .... >
<soap:operation soapAction="uri" style="rpc|document"> …2
<input>
<soap:body parts="nmtokens" use="litera |encoded"
encodingStyle="uri-list" namespace="uri">…3
<soap:header message="qname" fault="qname"/> …4
</input>
<output>
<soap:body parts="nmtokens" use="litera |encoded"
encodingStyle="uri-list"? namespace="uri"/>…3
<soap:header message="qname" fault="qname"/> …4
</output>
<fault>
<soap:fault name="nmtoken" use="litera |encoded"
encodingStyle="uri-list" namespace="uri">…5
</fault>
</operation>
</binding>
<port .... >
<soap:address location="uri"/> …6
</port>
</definitions>
1)soap:binding
SOAP綁定元素的目的是指出綁定是針對SOAP協議格式的:Envelope, Header 和 Body。這個元素沒有對編碼或消息格式進行聲明。在使用SOAP綁定時必須指出soap:binding元素。
2)soap:operation
soap:operation 元素從整體上為操作提供信息。
style屬性指出操作是面向RPC(消息包含參數和返回值)的還是面向文檔的(消息包含文檔)。此信息可用于選擇合適的編程模板。此屬性的值將影響SOAP消息體的構建方式,如果沒有指定值,它默認為soap:binding元素中指定的值。如果soap:binding元素沒有指定樣式,它假定為"文檔"。
soapAction屬性為此操作的SOAPAction頭指定了值。此URI應當被直接用作SOAPAction頭的值,在作出請求時不要試圖將一個相對URI變成絕對URI。對于綁定了SOAP的HTTP協議來說,此值是必需的(它沒有默認值)。對于其它的SOAP協議綁定,決對不能為其指定值,而soap:operation元素可以被忽略。