1. 程式人生 > >WebService-WSDL簡單介紹

WebService-WSDL簡單介紹

復雜 lan ability rop 返回 soa 以及 特定 相關信息

一、什麽是WSDL

網絡服務描述語言(Web Services Description Language)簡稱WSDL。作用是通過接口之間的調用實現數據的傳輸。由於WSDL是基於XML格式的,所以它可以跨平臺進行調用。WSDL 文檔可以分為兩部分。頂部分由抽象定義組成,而底部分則由具體描述組成。這裏簡單介紹7個主要的元素。

二、7個主要的元素

Types - 數據類型定義的容器,它使用某種類型系統(一般地使用XML Schema中的類型系統)。

Message - 通信消息的數據結構的抽象類型化定義。使用Types所定義的類型來定義整個消息的數據結構。

Operation - 對服務中所支持的操作的抽象描述,一般單個Operation描述了一個訪問入口的請求/響應消息對。

PortType - 對於某個訪問入口點類型所支持的操作的抽象集合,這些操作可以由一個或多個服務訪問點來支持。

Binding - 特定端口類型的具體協議和數據格式規範的綁定。

Port - 定義為協議/數據格式綁定與具體Web訪問地址組合的單個服務訪問點。

Service- 相關服務訪問點的集合。

總結為以下3點:

1. 做什麽? 服務所提供的操作(方法),對應porttype,operation元素。

2. 怎麽做? 數據格式詳情(types,message)及訪問服務操作的必要協議(Binding)。

3. 在哪做?: 由特定協議約定的網絡地址。如URL。 (service,port)。

三、type

數據類型定義的容器,它使用某種類型系統(一般地使用XML Schema中的類型系統)。定義了交換信息的數據格式。 為了實現最大的互操作性(interoperability)和平臺中立性(neutrality),WSDL選用XML Schema DataTypes(簡稱XSD)作為標準類型系統,並將它作為固有類型系統。Element元素定義在消息(message)定義中需要的XML元素的類型定義。complexType 元素定義了XML元素由哪些具體的類型組成以及組成元素的順序。 complexType元素如果放在Types元素下面而又不被element元素包含,那麽它就定義了一個公用的數據類型。可以被多個element元素所引用。否則為私有。

<wsdl:types>
  <xsd:schema
    targetNamespace=""
    xmlns=""
    xmlns:wsdl=""
    elementFormDefault="qualified">
    <xsd:complexType name="Transaction">
       <xsd:sequence>
          <xsd:element minOccurs="1" maxOccurs="1" name="number" type="xsd:int" />
          <xsd:element minOccurs="0" maxOccurs="1" name="checknumber" type="xsd:int" />
          <xsd:element minOccurs="1" maxOccurs="1" name="date" type="xsd:date" />
          <xsd:element minOccurs="1" maxOccurs="1" name="header" type="xsd:string" />
          <xsd:element minOccurs="1" maxOccurs="1" name="amount" type="xsd:float" />
       </xsd:sequence>
    </xsd:complexType>
這是一個復雜類型的定義,這個有點像定義了一個叫做Transaction的類,而這個類有屬性number,checknumber,date,header和amount。這裏定義了一個公用的數據類型結構。
  <xsd:element name="LookupTransactionsResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" name="transactions" type="xsd1:Transaction" />
      </xsd:sequence>
    </xsd:complexType>
   </xsd:element>
這裏定義了一個數據類型元素(element)叫做LookupTransactionsResponse,在這裏引用了前面定義的Transaction的集合. 在後面的消息定義中將會引用到這裏所定義的數據類型元素。

   <xsd:element name="LookupTransactions">
    <xsd:complexType>
       <xsd:sequence>
          <xsd:element minOccurs="1" maxOccurs="1" name="accountNumber" type="xsd:int" />
          <xsd:element minOccurs="0" maxOccurs="1" name="date1" type="xsd:date" />
          <xsd:element minOccurs="0" maxOccurs="1" name="date2" type="xsd:date" />
          <xsd:element minOccurs="1" maxOccurs="1" name="token" type="xsd:base64Binary" />
       </xsd:sequence>
    </xsd:complexType>
   </xsd:element>
這裏定義的數據類型是一個參數列表,它有accountNumber,date1,date2,token組成。類似於 SomeObject.lookupTransactions(accountNumber,date1,date2,token) 裏面的參數列表。complexType 定義在了element裏面,那麽這個數據類型結構只能是LookupTransactions 私有的了。
  </xsd:schema>
</wsdl:types>

targetNamespace: 相當於java語言裏的package(包名逆序寫)

minOccurs和maxOccurs,這個屬性用來設置該域在結構中發生的次數上下限。缺省情況下每個字段值發生一次。使 用這些屬性,你可以改變結構體中一個域發生的次數。

四、 Message

Message具體定義了在通信中使用的消息的數據結構。使用Types所定義的類型來定義整個消息的數據結構。定義了調用該接口的時候,soap請求消息的書寫以及調用格式等相關信息。

<wsdl:message name="LookupTransactionsResponse">
    <wsdl:part name="parameters" element="xsd1:LookupTransactionsResponse" />
</wsdl:message>
這裏定義了服務在調用之後消息返回的數據格式。其名字為parameters,數據的類型就是xsd1:LookupTransactionsResponse。
<wsdl:message name="LookupTransactions">     <wsdl:part name="parameters" element="xsd1:LookupTransactions" /> </wsdl:message> 這裏定義了訪問服務時需要傳什麽樣的數據。

五、PortType,Operation

PortType - 具體定義了一個服務可以訪問的接口。是對於某個端口類型所支持操作的抽象集合。某個端口(porttype),如soap端口類型,http端口類型。

Operation - 對服務中所支持的操作的抽象描述,一般單個Operation描述了一個訪問入口的請求/響應消息。定義了服務包含的可以被調用的方法個數。

<wsdl:portType name="OnlineBankingPortType">
    <wsdl : peration name="LookupTransactions">
       <wsdl:input message="tns:LookupTransactions" />
       <wsdl : utput message="tns:LookupTransactionsResponse" />
    </wsdl : peration>
</wsdl:portType>
這裏定義了一個可以訪問的方法LookupTransactions。這個方法的入參,又叫入站消息吧是message裏面定義的tns:LookupTransactions。 同時這個方法還有一個返回對象,又叫出戰消息,是message裏面所定義的tns:LookupTransactionsResponse   <wsdl:portType name="ChinaStockWebServiceSoap">      <wsdl :operation name="getStockImageByCode">       <wsdl:documentation xmlns:wsdl=""> sdf </wsdl:documentation>          <wsdl:input message="tns:getStockImageByCodeSoapIn" />          <wsdl :output message="tns:getStockImageByCodeSoapOut" />      </wsdl : peration>   </wsdl:portType>   <wsdl:portType name="ChinaStockWebServiceHttpPost">     <wsdl :operation name="getStockImageByCode">      <wsdl:documentation xmlns:wsdl=""> test </wsdl:documentation>     <wsdl:input message="tns:getStockImageByCodeHttpPostIn" />     <wsdl :output message="tns:getStockImageByCodeHttpPostOut" />     </wsdl : peration>    </wsdl:portType> // 這裏就定義了兩個端口類型soap和httppost。
Types,Message和PortType抽象地描述了是如何調用webservice的,與具體的web服務部署無關。註意這裏全部用的是wsdl的命名空間。沒有用到soap的命名空間。在後面的綁定和部署就會用到soap消息的命名空間了。


六、Binding

特定端口類型的具體協議和數據格式規範的綁定。binding 元素描述特定服務接口的協議、數據格式、安全性和其它屬性。針對操作和portType中使用的消息指定實際的協議和數據格式規範。

<wsdl:binding name="OnlineBankingPortBinding" type="tns:OnlineBankingPortType">
  <soap:binding transport=""/>
  <wsdl:operation name="LookupTransactions">
     <soap:operation soapAction=""/>
    <wsdl:input>
       <soap:body use="literal" />
    </wsdl:input>
    <wsdl:output>
       <soap:body use="literal" />
    </wsdl:output>
  </wsdl:operation>
</wsdl:binding>

前面所定義的端口類型OnlineBankingPortType 綁定在 soap/http協議上面了。這裏用到soap的命名空間進行了綁定。

Soap:binding :指出綁定是針對soap協議格式的。Transport指定了傳輸協議。Style指定通信風格。有“rpc”“document”兩種風格。

Soap : peration :為SOAP服務操作提供消息。通常可以指明此操作的SOAPActionHTTP頭。Soap:body :指出消息如何在SOAP BODY元素中表現。

<wsdl:binding name="HelloServiceHttpBinding" type="tns:HelloServicePortType">
        <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="sayHello">
            <wsdlsoap:operation soapAction="" />
            <wsdl:input name="sayHelloRequest">
                <wsdlsoap:body use="literal" />
            </wsdl:input>
            <wsdl:output name="sayHelloResponse">
                <wsdlsoap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
</wsdl:binding>

type屬性:引用上面的<portType>

<soap:operation style="document" /> 傳輸的是documentxml

input:指定客戶端應用傳過來的數據,<soap:body use="literal" />:文本數據

output:指定服務器端返回客戶端的數據,<soap:body use="literal" />:文本數據

七、ServicePort

Service- 相關服務訪問點的集合。一個服務所有訪問入口的部署細節。一個Service往往包含多個訪問入口(如URL,每個訪問入口都會使用一個port來描述。Port - 定義為協議/數據格式綁定與具體Web訪問地址組合的單個服務訪問點。由哪個web地址(URL)來訪問,綁定到什麽樣的端口上面。

<wsdl:service name="HelloService">
        <wsdl:port name="HelloServiceHttpPort" binding="tns:HelloServiceHttpBinding">
            <wsdlsoap:address  location="http://localhost:8080/xfire/services/HelloService" />
        </wsdl:port>
</wsdl:service>

name屬性:它用以指定一個服務器端處理請求的入口(就是接口的實現)

binding屬性:引用上面定義的<binding>

address : 當前webservice的請求地址

Soap:address : SOAP服務訪問指定的網絡地址。

下面為多個訪問端口的定義Demo:

<wsdl:service name="ChinaStockWebService">
   <wsdl:documentation xmlns:wsdl=""> test </wsdl:documentation>
   <wsdl:port name="ChinaStockWebServiceSoap" binding="tns:ChinaStockWebServiceSoap">
       <soap:address location="" />
   </wsdl:port>
   <wsdl:port name="ChinaStockWebServiceHttpGet" binding="tns:ChinaStockWebServiceHttpGet">
       <http:address location="" />
   </wsdl:port>
</wsdl:service>

至此,簡單介紹完畢!

Soap:binding :指出綁定是針對soap協議格式的。Transport指定了傳輸協議。Style指定通信風格。有“rpc”“document”兩種風格。

WebService-WSDL簡單介紹