Web 服務(wù)是一種新型的 Web 應(yīng)用程序。它們是自適應(yīng)、自我描述、模塊化的應(yīng)用程序,這些應(yīng)用程序可以跨越Web 進(jìn)行發(fā)表、定位和調(diào)用。
Web 服務(wù)所執(zhí)行的功能可以是從簡(jiǎn)單的請(qǐng)求到復(fù)雜的商業(yè)過程中的任何事。簡(jiǎn)單的Web 服務(wù)可以提供股票報(bào)價(jià)或處理信用卡交易。一旦部署了 Web 服務(wù),其它的應(yīng)用 程序(及其它的 Web 服務(wù))可以發(fā)現(xiàn)和調(diào)用所部署的服務(wù)
因?yàn)?Web 服務(wù)要滿足所有這些需要,所以,有兩個(gè)技術(shù)是關(guān)鍵的:
- XML
XML 對(duì)於 Web 中移動(dòng)的結(jié)構(gòu)化數(shù)據(jù)是非常重要的技術(shù)。如果 Web 要以可靠的、 自動(dòng)的方式處理數(shù)據(jù),那麼 HTML
文檔是滿足不了此要求的。如果數(shù)據(jù)是以 XML 發(fā)送的,那麼 Web 服務(wù)可以以不同的、有效的方式來(lái)處理這些數(shù)據(jù)。XML
的內(nèi)容與表示的分離是很理想的。 - SOAP
SOAP,即簡(jiǎn)單對(duì)象訪問協(xié)議,使用 XML 消息調(diào)用遠(yuǎn)程方法。Web 服務(wù)可以通過 HTTP 的 post 和 get 方法與遠(yuǎn)程的機(jī)器交互,但 SOAP 則更加強(qiáng)健和靈活。

在 Web 服務(wù)領(lǐng)域共有三個(gè)組件:
- 服務(wù)提供者 :
提供服務(wù)及維護(hù)注冊(cè)表以使服務(wù)可用。 - 服務(wù)代理 :
為服務(wù)提供交換場(chǎng)所。服務(wù)代理充當(dāng)服務(wù)提供者與服務(wù)請(qǐng)求者之間的中介。 - 服務(wù)請(qǐng)求者 :
與服務(wù)代理一起發(fā)現(xiàn) Web 服務(wù),然後調(diào)用這些服務(wù)以創(chuàng)建應(yīng)用程序。
有三個(gè) Web 服務(wù)操作:
- 發(fā)布/撤除發(fā)布 :
發(fā)布和撤除發(fā)布是指將服務(wù)發(fā)布至注冊(cè)表(發(fā)布)或除去它們的一些項(xiàng)(撤除發(fā)布)。服務(wù)提供者聯(lián)系服務(wù)代理來(lái)發(fā)布或不發(fā)布某個(gè)服務(wù)。 - 查找 :
查找操作由服務(wù)請(qǐng)求者和服務(wù)代理共同完成。服務(wù)請(qǐng)求者描述他們正在尋找的服務(wù)類型,而服務(wù)代理發(fā)布與請(qǐng)求最匹配的結(jié)果。 - 綁定 :
綁定操作發(fā)生在服務(wù)請(qǐng)求者和服務(wù)提供者之間。雙方經(jīng)過適當(dāng)?shù)纳逃懼幔?qǐng)求者就可以訪問和調(diào)用提供者所提供的服務(wù)。
Web 服務(wù)實(shí)現(xiàn)技術(shù)
對(duì)象界面描述: WSDL
如果我們打算發(fā)布所有的 Web 服務(wù),就需要有個(gè)描述它們的通用語(yǔ)言。 如果我正提供一個(gè)服務(wù),就需要將其描述給其他人,如果我想使用一個(gè)服 務(wù),就需要將我所尋找的服務(wù)描述出來(lái)。WSDL 就是基於此目的設(shè)計(jì)出來(lái)的。
對(duì)象訪問: SOAP
SOAP 提供一套標(biāo)記來(lái)表示在 Web 上使用 HTTP 傳輸協(xié)議(從 SOAP 1.1 以來(lái),SMTP 也可以)
發(fā)送的不同信息塊的作用。但是,SOAP 向您提供的能力遠(yuǎn)遠(yuǎn)強(qiáng)於HTML。 使用 SOAP,您的程序向 SOAP 服務(wù)器發(fā)送"SOAP
請(qǐng)求""""""" XML 文檔,描述在遠(yuǎn)程機(jī)器上要調(diào)用的方法和所有要傳遞給它的參數(shù))。 SOAP 服務(wù)器將嘗試用那些參數(shù)執(zhí)行該方法,並將
SOAP 響應(yīng)發(fā)回程序。響應(yīng)可以是執(zhí)行的結(jié)果,也可以是相應(yīng)的錯(cuò)誤消息。
對(duì)象界面發(fā)現(xiàn): UDDI
UDDI是用於 Web 服務(wù)注冊(cè)信息的規(guī)范。正如我們已經(jīng)討論過的,發(fā)布後的Web
服務(wù)是可以相互被發(fā)現(xiàn)的;通過在UDDI的發(fā)布服務(wù)器中注冊(cè)Web服務(wù)的信息,Web服務(wù)的請(qǐng)求者和代理可通過這個(gè)發(fā)布服務(wù)器找到它們所需要的服務(wù)。在發(fā)
布服務(wù)器中,業(yè)務(wù)邏輯和服務(wù)都是以通用的XML 格式描述的。在這些 XML 中的結(jié)構(gòu)數(shù)據(jù)很容易進(jìn)行搜索、分析和處理。
對(duì)象實(shí)現(xiàn): EJB, COM+, CORBA以及任何可用於對(duì)象實(shí)現(xiàn)的技術(shù)
SOAP 結(jié)構(gòu)
SOAP為在一個(gè)鬆散的、分布的環(huán)境中使用XML對(duì)等地交換結(jié)構(gòu)化的和類型化的信息提供了一個(gè)簡(jiǎn)單且輕量級(jí)的機(jī)制
SOAP envelope (SOAP信封)
SOAP encoding rules (SOAP編碼規(guī)則)
SOAP RPC representation (SOAP RPC表示)
SOAP binding (SOAP綁定)
Request/Response Message
Request 調(diào)用遠(yuǎn)端對(duì)象的某個(gè)方法
Response 返回該方法運(yùn)行後的輸出結(jié)果
SOAP Message 結(jié)構(gòu)
SOAP 定義了一個(gè)"envelope""""""envelope"""""""""""""""""""XML詞匯使用namespace來(lái)區(qū)分彼此。
SOAP例子:
<env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope">
<env:Header>
<ac:alertcontrol xmlns:ac="http://example.org/alertcontrol">
<ac:priority>1</ac:priority>
<ac:expires>2001-06-22 11:00am</ac:expires>
</ac:alertcontrol>
</env:Header>
<env:Body>
<alert:alert xmlns:alert="http://example.org/alert">
<alert:msg>上午11:30,發(fā)出計(jì)算機(jī)設(shè)備訂貨傳真。</alert:msg>
</alert:alert>
</env:Body>
</env:Envelope>
Web Services Description Language(WSDL)
使用XML進(jìn)行描述類似IDL, 不過是使用XML格式
描述了服務(wù)的操縱信息
WSDL是早先技術(shù)的綜合
WSDL Elements
Universal Description, Discovery and Integration(UDDI)
UDDI 注冊(cè)中心包含了通過程序手段可以訪問到的對(duì)企業(yè)和企業(yè)支持的服務(wù)所做的描述。此外,還包含對(duì) Web
服務(wù)所支持的因行業(yè)而異的規(guī)范、分類法定義(用於 對(duì)於企業(yè)和服務(wù)很重要的類別)以及標(biāo)識(shí)系統(tǒng)(用於對(duì)於企業(yè)很重要的標(biāo)識(shí))的引用。UDDI
提供了一種編程模型和模式,它定義與注冊(cè)中心通信的規(guī)則。UDDI 規(guī)范中所有 API 都用 XML 來(lái)定義,包裝在 SOAP 信封中,在
HTTP 上傳輸。
UDDI 消息的傳輸,通過 HTTP 從客戶機(jī)的 SOAP 請(qǐng)求傳到注冊(cè)中心節(jié)點(diǎn),然後再反向傳輸。注冊(cè)中心服務(wù)器的 SOAP 服務(wù)器接收
UDDI SOAP 消息、進(jìn)行處理,然後把 SOAP
響應(yīng)返回給客戶機(jī)。就注冊(cè)中心條例而言,客戶機(jī)發(fā)出的要修改數(shù)據(jù)的請(qǐng)求必須確保是安全的、經(jīng)過驗(yàn)証的事務(wù)。