什麼是WebService?
WebService用於解決什麼問題?
1. 不同語言編寫的系統之間需要互動
WebService如何解決這些問題?
1. 使用XML,資訊的表示和服務的表示都使用XML
2. 使用HTTP,HTTP協議可以跨過多個防火牆
3. 使用SOAP訊息,SOAP訊息使用XML語言,獨立於具體的程式設計語言
4. 使用WSDL描述服務,XML格式的文檔,獨立於特定的語言
5. 使用UDDI,用於發布和探索服務
什麼是WSDL(Web Service Description Language),用於描述服務提供者能夠提供的服務以及如何訪問這些服務,如何解析服務提供者返回的執行結果。
WSDL文檔結構:
1. 類型定義,定義方法調用時候參數和傳回值的類型
2. 訊息定義,定義請求和響應時候的訊息結構
3. 連接埠類型定義,連接埠中包含多個操作,每個操作包括請求資訊和響應資訊格式
4. 綁定定義,把操作與具體的SOAP訊息格式關聯起來
5. 服務定義,把服務的地址與綁定關聯起來
<?xml version="1.0" encoding="UTF-8"?>
<definions. ..>
<type>
...
</types>
<message name="add">
...
</message>
<portType name="CalculationDelegate">
...
</portType>
<binding name="CalculationPortBinding" type="tns:CalculatorDelegate">
...
</binding>
<service name="CalculatorService">
...
</service>
</definitions>
類型定義:定義各種操作中使用的參數和傳回值。使用types元素,types元素中可以定義多個類型。
<xs:complexType name="add">
<xs:sequence>
<xs:element name="arg0" type="xs:int"/>
<xs:element name="arg1" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:element name="add" type="tns:add"/>
message定義:message定義了訊息的資料結構。message元素包含了一組Part元素。<part>元素的類型可以是XSD基本類型,也可以是SOAP定義類型、WSDL定義類型(WSDL)或是Types中定義的類型。
<message name="add">
<part element="tns:add" name="parameters"/>
</message>
定義連接埠類型
一個PortType可以包含若干個Operation
operation是對服務中所支援的操作的抽象描述,描述了請求和響應資訊的格式。
<portType name="CalculatorDelegate">
<operation name="add">
<input message="tns:add"/>
<output message="tns:addResponse">
</operation>
...
</portType>
定義綁定
綁定部分定義了連接埠類型與具體的網路傳輸協議或訊息互動協議的綁定,以及具體的資料格式規範。
綁定使用bindings元素定義,可以有零個、一個或者多個<binding>元素。
每個<operation>描述輸入通過網路調用和響應
<binding name="CalculatorPortBinding" type="tns:CalculatorDelegate">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<!-- 具體操作 -->
<operation name="add">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
...
</binding>
定義Service
服務部分描述的是具體的被部署的Web服務所提供的所有訪問入口的部署細節,一個Service往往有多個服務訪問入口(Port)。Port描述的是一個服務訪問入口的部署細節。
<service name="CalculatorService">
<port binding="tns:CalculatorPortBinding" name="CalculatorPort">
<soap:address location="http://localhost:7001/webServiceP/CalculatorPort"/>
</port>
</service>
SOAP
什麼是SOAP(Simple Object Access Protocol)定義了一種訊息格式。
通訊雙方可以根據該格式封裝訊息和交換資訊。
SOAP基於XML語言,使用XML作為SOAP訊息的基礎使得任何實現基本的Internet通訊服務的系統都能處理和傳送這類訊息。
SOAP協議只是定義了一種訊息格式,它並沒有為交換訊息而強加某種特定的傳送協議,因此可採用HTTP、FTP和SMTP等協議來傳送訊息。
SOAP訊息執行個體
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelop/" xmlns:q0="http://service/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" mlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:add>
<arg0>22</arg0>
<arg1>111</arg1>
</q0:add>
</soapenv:Body>
</soapenv:Envelop>
為什麼使用SOAP
SOAP可以很好的與HTTP協議結合
SOAP提供了一種標準的方法,它使用XML文檔封裝請求資訊和響應資訊,使得允許在不同的作業系統並使用不同的技術和程式設計語言的應用程式可以互相進行通訊。
SOAP訊息組成
一條SOAP訊息就是一個普通的XML文檔,包含下列元素:
必需的Envelop元素,可把此XML文檔標識為一條SOAP訊息
可選的Header元素,包含頭部資訊
必需的Body元素,包含所有的調用和響應資訊
可選的Fault元素,提供有關在處理此訊息所發生錯誤的資訊
SOAP Envelope元素
SOAP的Envelope元素是SOAP訊息的根項目。
xmlns:soap的命名空間為http://www.w3.org/2001/12/soap-envelope
SOAP的encodingStyle屬性用於定義在文檔中使用的資料類型。此屬性可出現在任何SOAP元素中,並會被應用到元素的內容及元素的所有子項目上。SOAP訊息沒有預設的編碼方式。
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
</soap:Envelope>
SOAP Header元素
SOAP Header元素封裝了應用程式專用資訊(比如認證、支付等),如果沒有特殊要求可以不用Header元素,如果有Header元素,則它必須是Envelope元素的第一個子項目。
<soap:Header>
<m:Trans xmlns:m = "http://www.w3school.com.cn/transaction/" soap:mustUnderstand="1">234</Trans>
</soap:Header>
SOAP Body元素
負責指定要執行的方法名以及所有傳遞給方法的參數。
在Web服務者接受、翻譯並處理完了這個方法調用之後,它就會發送一個響應或錯誤訊息。
<soapenv:Body>
<q0:add>
<arg0>22</arg0>
<arg1>111</arg1>
</q0:add>
</soapenv>
SOAP Fault:用於在SOAP訊息中傳輸錯誤或狀態資訊。如果SOAP訊息需要包含SOAP Fault元素的話,它必須作為一個Body條目出現,並且最多隻能出現一次。
fault元素包含如下子項目:
1. faultcode,必須在SOAP Fault中出現,表示錯誤碼,SOAP定義了一個小的錯誤集合,用於定義基本的SOAP錯誤。
2. faultstring,錯誤碼的描述資訊
3. faultlactor,用於指示錯誤源,屬性的值是一個標識該錯誤源的URI
4. detail,添加使用者自訂的錯誤,包括錯誤訊息和錯誤號碼
UDDI是一種使貿易夥伴彼此發現對方和查詢對方的規範。
終端使用者通過搜尋企業列表、企業分類或者實際Web服務的可程式化描述
UDDI不僅是一個簡易的搜尋引擎,它也包含了如何通過編程來和這些Web服務進行互動。
UDDI資料表
UDDI的資料分為白頁、黃頁和綠葉:
1. 白頁資訊:包含了基本的公司資訊,例如企業名稱、描述資訊以及連絡方式
2. 黃頁資訊:按分類法對公司資訊進行分類
3. 綠葉資訊:包含了如何與企業進行電子互動的資訊,包含交易過程、服務描述以及解釋如何調用具體Web服務的捆綁資訊
UDDI程式員的API規範,由兩部分組成:
1. Inquiry API,用於查詢和瀏覽UDDI註冊表來發現終端使用者需要訪問的企業和服務
2. Publisher API,用於添加、更新和刪除UDDI註冊表中的企業和服務資訊