[轉(zhuǎn)]http://www.54bk.com/user1/8454/archives/2005/26611.html
1. 什么是webservice
從表面上看,Web service 就是一個(gè)應(yīng)用程序,它向外界暴露出一個(gè)能夠通過(guò)Web進(jìn)行調(diào)用的API。這就是說(shuō),你能夠用編程的方法通過(guò)Web來(lái)調(diào)用這個(gè)應(yīng)用程序。
對(duì)Web service 更精確的解釋: Web services是建立可互操作的分布式應(yīng)用程序的新平臺(tái)。作為一個(gè)Windows程序員,你可能已經(jīng)用COM或DCOM建立過(guò)基于組件的分布式應(yīng)用程序。COM是一個(gè)非常好的組件技術(shù),但是我們也很容易舉出COM并不能滿足要求的情況。Web service平臺(tái)是一套標(biāo)準(zhǔn),它定義了應(yīng)用程序如何在Web上實(shí)現(xiàn)互操作性。你可以用任何你喜歡的語(yǔ)言,在任何你喜歡的平臺(tái)上寫Web service ,只要我們可以通過(guò)Web service標(biāo)準(zhǔn)對(duì)這些服務(wù)進(jìn)行查詢和訪問(wèn)。
不管你的Web service是用什么工具,什么語(yǔ)言寫出來(lái)的,只要你用SOAP協(xié)議通過(guò)HTTP來(lái)調(diào)用它,總體結(jié)構(gòu)都一致。通常,你用你自己喜歡的語(yǔ)言(如VB 6或者VB.NET)來(lái)構(gòu)建你的Web service,然后用SOAP Toolkit或者.NET的內(nèi)建支持來(lái)把它暴露給Web客戶。于是,任何語(yǔ)言,任何平臺(tái)上的客戶都可以閱讀其WSDL文檔,以調(diào)用這個(gè)Web service。客戶根據(jù)WSDL描述文檔,會(huì)生成一個(gè)SOAP請(qǐng)求消息。Web service都是放在Web服務(wù)器 (如IIS) 后面的,客戶生成的SOAP請(qǐng)求會(huì)被嵌入在一個(gè)HTTP POST請(qǐng)求中,發(fā)送到Web服務(wù)器來(lái)。Web服務(wù)器再把這些請(qǐng)求轉(zhuǎn)發(fā)給Web service請(qǐng)求處理器。對(duì)VB 6程序來(lái)說(shuō),Web service請(qǐng)求處理器是一個(gè)與SOAP Toolkit組件協(xié)同工作的ASP頁(yè)面或ISAPI extension。而對(duì)VB.NET程序來(lái)說(shuō),Web service請(qǐng)求處理器則是一個(gè).NET Framework自帶的ISAPI extension。請(qǐng)求處理器的作用在于,解析收到的SOAP請(qǐng)求,調(diào)用Web service,然后再生成相應(yīng)的SOAP應(yīng)答。Web服務(wù)器得到SOAP應(yīng)答后,會(huì)再通過(guò)HTTP應(yīng)答的方式把它送回到客戶端。
2. 基本概念
SOAP
Web service建好以后,其他人就會(huì)去調(diào)用它。簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(SOAP)提供了標(biāo)準(zhǔn)的遠(yuǎn)程過(guò)程調(diào)用( RPC)方法來(lái)調(diào)用Web service。SOAP規(guī)范定義了SOAP消息的格式,以及怎樣通過(guò)HTTP協(xié)議來(lái)使用SOAP。SOAP也是基于XML和XSD的,XML是SOAP的數(shù)據(jù)編碼方式。客戶端和服務(wù)端之間的方法調(diào)用請(qǐng)求和結(jié)果返回值都放在這些消息里。
XML和XSD
可擴(kuò)展的標(biāo)記語(yǔ)言(XML)是Web service平臺(tái)中表示數(shù)據(jù)的基本格式。除了易于建立和易于分析外,XML主要的優(yōu)點(diǎn)在于它既是平臺(tái)無(wú)關(guān)的,又是廠商無(wú)關(guān)的。無(wú)關(guān)性是比技術(shù)優(yōu)越性更重要的。XML解決了數(shù)據(jù)表示的問(wèn)題,但它沒(méi)有定義一套標(biāo)準(zhǔn)的數(shù)據(jù)類型,更沒(méi)有說(shuō)怎么去擴(kuò)展這套數(shù)據(jù)類型。例如,整形數(shù)到底代表什么?16位,32位,還是64位?這些細(xì)節(jié)對(duì)實(shí)現(xiàn)互操作性都是很重要的。W3C制定的XML Schema(XSD)就是專門解決這個(gè)問(wèn)題的一套標(biāo)準(zhǔn)。它定義了一套標(biāo)準(zhǔn)的數(shù)據(jù)類型,并給出了一種語(yǔ)言來(lái)擴(kuò)展這套數(shù)據(jù)類型。Web service平臺(tái)就是用XSD來(lái)作為其數(shù)據(jù)類型系統(tǒng)的。當(dāng)用某種語(yǔ)言(如VB.NET或C#)來(lái)構(gòu)造一個(gè)Web service時(shí),為了符合Web service標(biāo)準(zhǔn),所有使用的數(shù)據(jù)類型都必須被轉(zhuǎn)換為XSD類型。
WSDL(Web Services Description Language)
用于描述服務(wù)端所提供服務(wù)的XML格式。WSDL文件里,描述了服務(wù)端提供的服務(wù),提供的調(diào)用方法,以及調(diào)用時(shí)所要遵循的格式,比如調(diào)用參數(shù)和返回值的格式等等。WSDL 很像COM編程里的IDL(Interface Description Language),是服務(wù)器與客戶端之間的契約,雙方必須按契約嚴(yán)格行事才能實(shí)現(xiàn)功能。
WSML(Web Services Meta Language)
用于描述WSDL里提供的方法與實(shí)現(xiàn)該方法的COM對(duì)象之間的映射關(guān)系。該文件是Microsoft的實(shí)現(xiàn)中特有的,不是SOAP標(biāo)準(zhǔn)的一部分。一般情況下,該文件只在服務(wù)端存在。
3.Webservice的技術(shù)特點(diǎn)
長(zhǎng)項(xiàng)一: 跨防火墻的通信
如果應(yīng)用程序有成千上萬(wàn)的用戶,而且分布在世界各地,那么客戶端和服務(wù)器之間的通信將是一個(gè)棘手的問(wèn)題。因?yàn)榭蛻舳撕头?wù)器之間通常會(huì)有防火墻或者代理服務(wù)器。在這種情況下,使用DCOM就不是那么簡(jiǎn)單,通常也不便于把客戶端程序發(fā)布到數(shù)量如此龐大的每一個(gè)用戶手中。傳統(tǒng)的做法是,選擇用瀏覽器作為客戶端,寫下一大堆ASP頁(yè)面,把應(yīng)用程序的中間層暴露給最終用戶。這樣做的結(jié)果是開(kāi)發(fā)難度大,程序很難維護(hù)。
舉個(gè)例子,在應(yīng)用程序里加入一個(gè)新頁(yè)面,必須先建立好用戶界面(Web頁(yè)面),并在這個(gè)頁(yè)面后面,包含相應(yīng)商業(yè)邏輯的中間層組件,還要再建立至少一個(gè)ASP頁(yè)面,用來(lái)接受用戶輸入的信息,調(diào)用中間層組件,把結(jié)果格式化為HTML形式,最后還要把“結(jié)果頁(yè)”送回瀏覽器。要是客戶端代碼不再如此依賴于HTML表單,客戶端的編程就簡(jiǎn)單多了。
如果中間層組件換成Web Service的話,就可以從用戶界面直接調(diào)用中間層組件,從而省掉建立ASP頁(yè)面的那一步。要調(diào)用Web Service,可以直接使用Microsoft SOAP Toolkit或.NET這樣的SOAP客戶端,也可以使用自己開(kāi)發(fā)的SOAP客戶端,然后把它和應(yīng)用程序連接起來(lái)。不僅縮短了開(kāi)發(fā)周期,還減少了代碼復(fù)雜度,并能夠增強(qiáng)應(yīng)用程序的可維護(hù)性。同時(shí),應(yīng)用程序也不再需要在每次調(diào)用中間層組件時(shí),都跳轉(zhuǎn)到相應(yīng)的“結(jié)果頁(yè)”。
從經(jīng)驗(yàn)來(lái)看,在一個(gè)用戶界面和中間層有較多交互的應(yīng)用程序中,使用Web Service這種結(jié)構(gòu),可以節(jié)省花在用戶界面編程上20%的開(kāi)發(fā)時(shí)間。另外,這樣一個(gè)由Web Service組成的中間層,完全可以在應(yīng)用程序集成或其它場(chǎng)合下重用。最后,通過(guò)Web Service把應(yīng)用程序的邏輯和數(shù)據(jù)“暴露”出來(lái),還可以讓其它平臺(tái)上的客戶重用這些應(yīng)用程序。
長(zhǎng)項(xiàng)二: 應(yīng)用程序集成
企業(yè)級(jí)的應(yīng)用程序開(kāi)發(fā)者都知道,企業(yè)里經(jīng)常都要把用不同語(yǔ)言寫成的、在不同平臺(tái)上運(yùn)行的各種程序集成起來(lái),而這種集成將花費(fèi)很大的開(kāi)發(fā)力量。應(yīng)用程序經(jīng)常需要從運(yùn)行在IBM主機(jī)上的程序中獲取數(shù)據(jù);或者把數(shù)據(jù)發(fā)送到主機(jī)或UNIX應(yīng)用程序中去。即使在同一個(gè)平臺(tái)上,不同軟件廠商生產(chǎn)的各種軟件也常常需要集成起來(lái)。通過(guò)Web Service,應(yīng)用程序可以用標(biāo)準(zhǔn)的方法把功能和數(shù)據(jù)“暴露”出來(lái),供其它應(yīng)用程序使用。
例如,有一個(gè)訂單登錄程序,用于登錄從客戶來(lái)的新訂單,包括客戶信息、發(fā)貨地址、數(shù)量、價(jià)格和付款方式等內(nèi)容;還有一個(gè)訂單執(zhí)行程序,用于實(shí)際貨物發(fā)送的管理。這兩個(gè)程序來(lái)自不同軟件廠商。一份新訂單進(jìn)來(lái)之后,訂單登錄程序需要通知訂單執(zhí)行程序發(fā)送貨物。通過(guò)在訂單執(zhí)行程序上面增加一層Web Service,訂單執(zhí)行程序可以把“Add Order”函數(shù)“暴露”出來(lái)。這樣,每當(dāng)有新訂單到來(lái)時(shí),訂單登錄程序就可以調(diào)用這個(gè)函數(shù)來(lái)發(fā)送貨物了。
長(zhǎng)項(xiàng)三: B2B的集成
用Web Service集成應(yīng)用程序,可以使公司內(nèi)部的商務(wù)處理更加自動(dòng)化。但當(dāng)交易跨越供應(yīng)商和客戶、突破公司的界限時(shí)會(huì)怎么樣呢?跨公司的商務(wù)交易集成通常叫做B2B集成。
Web Service是B2B集成成功的關(guān)鍵。通過(guò)Web Service,公司可以把關(guān)鍵的商務(wù)應(yīng)用“暴露”給指定的供應(yīng)商和客戶。例如,把電子下單系統(tǒng)和電子發(fā)票系統(tǒng)“暴露”出來(lái),客戶就可以以電子的方式發(fā)送訂單,供應(yīng)商則可以以電子的方式發(fā)送原料采購(gòu)發(fā)票。當(dāng)然,這并不是一個(gè)新的概念, EDI(電子文檔交換)早就是這樣了。但是,Web Service的實(shí)現(xiàn)要比EDI簡(jiǎn)單得多,而且Web Service運(yùn)行在Internet上,在世界任何地方都可輕易實(shí)現(xiàn),其運(yùn)行成本就相對(duì)較低。不過(guò),Web Service