現(xiàn)在的 Web 服務(wù)實(shí)現(xiàn)往往是簡(jiǎn)單的,通常類似于客戶端-服務(wù)器模型。然而,平臺(tái)中立的交換是受支持的,這就使一系列不同的客戶端實(shí)現(xiàn)可以與作為服務(wù)器函數(shù)的新代碼或遺留代碼進(jìn)行交互。許多文章都介紹了使這樣的應(yīng)用程序直接實(shí)現(xiàn)的技術(shù)。現(xiàn)在是看一看我們能夠如何使用它們的更大的圖景的時(shí)候了。作者解決了如何由簡(jiǎn)單的模型轉(zhuǎn)移到代表現(xiàn)實(shí)的任意復(fù)雜度的業(yè)務(wù)模型的問題。公元前 221 年,秦始皇將以前交戰(zhàn)的幾個(gè)國(guó)家統(tǒng)一為一個(gè)新的國(guó)家,我們現(xiàn)在稱之為中國(guó)。中國(guó)作為一個(gè)國(guó)家存在下來的一個(gè)可能的原因就是秦朝引入了標(biāo)準(zhǔn),標(biāo)準(zhǔn)鞏固了文化,促進(jìn)了貿(mào)易:標(biāo)準(zhǔn)的輪距使得馬車可以有效地行使在任何的道路,共同的書面語言使得每個(gè)人都可以交換信息(即使他們說的并不是相同的語言),而堅(jiān)固的工事(比如中國(guó)的長(zhǎng)城)使得人們可以防御外敵入侵。您可以說,他為標(biāo)準(zhǔn)化傳輸、消息交換和防火墻開發(fā)了一些模型。同樣地,現(xiàn)代的業(yè)務(wù)集成同樣也受益于標(biāo)準(zhǔn),它使異構(gòu)的計(jì)算機(jī)系統(tǒng)能夠有效地互操作。這些技術(shù)合在一起稱作 Web 服務(wù)。Web 服務(wù)的出現(xiàn)是以 SOAP 1.1 的引入為標(biāo)志的,SOAP 1.1 定義了將 xml 內(nèi)容用于分布式系統(tǒng),而同時(shí)隱藏實(shí)現(xiàn)的細(xì)節(jié)。四年后的今天,許多公司正在使用 Web 服務(wù),并且可以毫無疑問地地說,業(yè)界正處在 Web 服務(wù)主流時(shí)代的開端。IBM 將面向服務(wù)的體系結(jié)構(gòu)(Service-Oriented Architecture,SOA)視為它的按需(On demand)業(yè)務(wù)前景的互操作性和靈活性的要害。面向服務(wù)的體系結(jié)構(gòu)(SOA)支持跨企業(yè)和業(yè)務(wù)合作伙伴之間間的端到端集成。這就提供了一種靈活的業(yè)務(wù)流程模型,使得客戶可以迅速地響應(yīng)新的顧客需求、新的業(yè)務(wù)機(jī)會(huì)以及競(jìng)爭(zhēng)的威脅。什么是面向服務(wù)的體系結(jié)構(gòu)(SOA)?面向服務(wù)的體系結(jié)構(gòu)(SOA)表示您可以如何使用 Web 服務(wù)的大圖景。Web 服務(wù)規(guī)范定義了實(shí)現(xiàn)服務(wù)以及與它們的交互所需要的細(xì)節(jié)。然而,面向服務(wù)的體系結(jié)構(gòu)(SOA)是一種用于構(gòu)建分布式系統(tǒng)的方法,采用 SOA 這種方法構(gòu)建的分布式應(yīng)用程序可以將功能作為服務(wù)交付給終端用戶,也可以構(gòu)建其他的服務(wù)。面向服務(wù)的體系結(jié)構(gòu)(SOA)可以基于 Web 服務(wù),但是它可能改為使用其他的技術(shù)來代替。在使用面向服務(wù)的體系結(jié)構(gòu)(SOA)設(shè)計(jì)分布式應(yīng)用程序時(shí),您可以將 Web 服務(wù)的使用從簡(jiǎn)單的客戶端-服務(wù)器模型擴(kuò)展成任意復(fù)雜的系統(tǒng)。因而,單個(gè)的軟件資產(chǎn)成為開發(fā)其他應(yīng)用程序的基本構(gòu)件。您可以通過與新的代碼和遺留代碼一起使用的共同交互方式來減少系統(tǒng)的復(fù)雜性(CBDi 的 Lawrence Wilkes 開玩笑說,面向服務(wù)的體系結(jié)構(gòu)(SOA)可以代表"節(jié)省我們的資產(chǎn)(Save Our Assets)”)。有一種標(biāo)準(zhǔn)的方法可以用于表示這些軟件資產(chǎn)和與它們交互;現(xiàn)在人們關(guān)注的重點(diǎn)已經(jīng)轉(zhuǎn)移到基于這些構(gòu)件的應(yīng)用程序裝配上來了。雖然在這里討論的是用于業(yè)務(wù)應(yīng)用程序的面向服務(wù)的體系結(jié)構(gòu)(SOA),但是面向服務(wù)的體系結(jié)構(gòu)(SOA)同樣也可以用于其他的分布式系統(tǒng),比如網(wǎng)格計(jì)算和高級(jí) Web 服務(wù)規(guī)范(例如,Web 服務(wù)分布式治理(WS-DistributedManagement)、Web 服務(wù)信任(WS-Trust)以及 UDDI)。什么是服務(wù)?在面向服務(wù)的體系結(jié)構(gòu)(SOA)中, 服務(wù)(service)是封裝成用于業(yè)務(wù)流程的可重用組件的應(yīng)用程序函數(shù)。它提供信息或簡(jiǎn)化業(yè)務(wù)數(shù)據(jù)從一個(gè)有效的、一致的狀態(tài)向另一個(gè)狀態(tài)的轉(zhuǎn)變。用于實(shí)現(xiàn)特定服務(wù)的流程并不重要,只要它響應(yīng)您的命令并為您的請(qǐng)求提供高質(zhì)量的服務(wù)就可以了。 通過定義的通信協(xié)議,可以調(diào)用服務(wù)來強(qiáng)調(diào)互操作性和位置透明性。一個(gè)服務(wù)表現(xiàn)為一個(gè)軟件組件,因?yàn)閺姆?wù)請(qǐng)求者的角度來看,它看起來就像是一個(gè)自包含的函數(shù)。然而,實(shí)際上,服務(wù)的實(shí)現(xiàn)可能包括在一個(gè)企業(yè)內(nèi)部的不同計(jì)算機(jī)上或者許多業(yè)務(wù)合作伙伴擁有的計(jì)算機(jī)上執(zhí)行的很多步驟。就封裝的軟件而言,服務(wù)可能是一個(gè)組件,也可能不是一個(gè)組件。如同類對(duì)象,請(qǐng)求者應(yīng)用程序能夠?qū)⒎?wù)看作是一個(gè)整體。Web 服務(wù)是以使用 SOAP 消息(它是用像 HTTP 這樣的標(biāo)準(zhǔn)協(xié)議上的 WSDL 來描述的)的調(diào)用為基礎(chǔ)的。使用 Web 服務(wù)的最佳實(shí)踐就是與外部的業(yè)務(wù)伙伴通信。松耦合服務(wù)請(qǐng)求者到服務(wù)提供者的綁定與服務(wù)之間應(yīng)該是松耦合的。這就意味著,服務(wù)請(qǐng)求者不知道提供者實(shí)現(xiàn)的技術(shù)細(xì)節(jié),比如程序設(shè)計(jì)語言、部署平臺(tái),等等。服務(wù)請(qǐng)求者往往通過消息調(diào)用操作--請(qǐng)求消息和響應(yīng)--而不是通過使用 API 和文件格式。這個(gè)松耦合使會(huì)話一端的軟件可以在不影響另一端的情況下發(fā)生改變,前提是消息模式保持不變。在一個(gè)極端的情況下,服務(wù)提供者可以將以前基于遺留代碼(例如,COBOL)的實(shí)現(xiàn)完全用基于 java 語言的新代碼取代,同時(shí)又不對(duì)服務(wù)請(qǐng)求者造成任何影響。這種情況是真實(shí)的,只要新代碼支持相同的消息模式。明確定義的接口服務(wù)交互必須是明確定義的。Web 服務(wù)描述語言(Web services Description Language,WSDL)是受到廣泛支持的方法,用于描述服務(wù)請(qǐng)求者所要求的綁定到服務(wù)提供者的細(xì)節(jié)。服務(wù)描述的重點(diǎn)在于與下面幾部分交互所用的操作: 服務(wù)
提供者被要求記住請(qǐng)求之間 Bruce 的帳號(hào),這就在服務(wù)實(shí)現(xiàn)中引入了復(fù)雜性。無狀態(tài)的服務(wù)設(shè)計(jì)將重新定義會(huì)話,如下所示:Requester: "What is Bruce’s checking account balance?"