WSDL在Web Service中的意義和作用
1.WSDL
a)原理:從XML-RPC和SOAP的使用我們可以看到,請求訊息都是根據服務提供方的服務介面來生成一個HTTP請求,在請求當中封裝所要呼叫的方法,以及方法呼叫時的引數。
客戶端服務呼叫程式碼要完成的任務,也就是使用實現所提供的介面,來宣告呼叫方所需要的方法名及引數,然後由實現根據使用者的輸入來組合HTTP請求。
這個過程可以這樣來描述,首先獲取使用者輸入,然後把輸入變成實現所要求的儲存格式,然後再把該格式變成HTTP請求。一般情況下,我們需要手工完成到第二步,但是,這個過程顯然是可以把他自動化的,自動化的效果就是使用者不再需要書寫這部分的程式碼,減少工作量和降低出錯機率。
自動化的過程就需要WSDL
對於每個服務,WSDL需要描述兩部分的內容,一是介面,二是實現。介面描述了服務的格式,例如服務名,服務引數,服務結果。服務實現則描述了,使用者所對應提供的輸入如何轉換成符合某一實現協議的形式,一般情況下,我們使用SOAP作為實現協議,那麼客戶端在分析了WSDL檔案以後,將會把使用者的輸入轉換成我們已經看到過的SOAP請求,之後的過程就與之前的完全一樣。
2.WSDL例項
a)導言部分:指定了下文將要使用的資料型別和訊息型別。
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="HelloWorldDescription"
targetNamespace="urn:HelloWorld" xmlns:tns="urn:HelloWorld"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:message name="sayHello_IN">
<part name="name" type="xsd:string" />
</wsdl:message>
<wsdl:message name="sayHello_Out">
<part name="greeting" type="xsd:string" />
</wsdl:message>
b)服務介面:描述了方法名,和輸入輸出引數。
<wsdl:portType name="HelloWorldInterface">
<wsdl:operation name="sayHello">
<wsdl:input message="tns:sayHello_IN" />
<wsdl:output message="tns:sayHello_OUT" />
</wsdl:operation>
</wsdl:portType>
c)服務實現:描述了某一個服務介面如何轉換為SOAP請求。
<wsdl:binding name="HelloWorldBinding" type="tns:HelloWorldInterface">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="sayHello">
<soap:operation soapAction="urn:Hello" />
<wsdl:input>
<soap:body use="encoded" namespace="urn:Hello"
encodingStyle=http://schemas.xmlsoap.org/soap/encoding//>
</wsdl:input>
<wsdl:output>
<soap:body use="encoded" namespace="urn:Hello"
encodingStyle=http://schemas.xmlsoap.org/soap/encoding//>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
d)服務位置:指定了SOAP請求所要傳送的目的地。
<wsdl:service name="HelloWorldService">
<wsdl:port name="HelloWorldPort" binding="tns:HelloWorldBinding">
<soap:address location="http://localhost:8080" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>