WebService是一種跨編程語言和跨操作系統(tǒng)平臺的遠程調(diào)用技術(shù)
所謂遠程調(diào)用,就是一臺計算機a上的一個程序可以調(diào)用到另外一臺計算機b上的一個對象的方法,譬如,銀聯(lián)提供給商場的pos刷卡系統(tǒng)(采用交互提問的方式來加深大家對此技術(shù)的理解)。
遠程調(diào)用技術(shù)有什么用呢?商場的POS機轉(zhuǎn)賬調(diào)用的轉(zhuǎn)賬方法的代碼是在銀行服務(wù)器上,還是在商場的pos機上呢?
什么情況下可能用到遠程調(diào)用技術(shù)呢?例如,amazon,天氣預(yù)報系統(tǒng),淘寶網(wǎng),校內(nèi)網(wǎng),百度等把自己的系統(tǒng)服務(wù)以webservice服務(wù)的形式暴露出來,讓第三方網(wǎng)站和程序可以調(diào)用這些服務(wù)功能,這樣擴展了自己系統(tǒng)的市場占有率,往大的概念上吹,就是所謂的SOA應(yīng)用。
所謂跨編程語言和跨操作平臺,就是說服務(wù)端程序采用java編寫,客戶端程序則可以采用其他編程語言編寫,反之亦然!跨操作系統(tǒng)平臺則是指服務(wù)端程序和客戶端程序可以在不同的操作系統(tǒng)上運行。
除了WebService外,常見的遠程調(diào)用技術(shù)還有RMI(Remote method invoke)和CORBA,由于WebService的跨平臺和跨編程語言特點,因此比其他兩種技術(shù)應(yīng)用更為廣泛,但性能略低。
WebService使用SOAP協(xié)議實現(xiàn)跨編程語言和跨操作系統(tǒng)平臺
WebService采用HTTP協(xié)議傳輸數(shù)據(jù),采用XML格式封裝數(shù)據(jù)(即XML中說明調(diào)用遠程服務(wù)對象的哪個方法,傳遞的參數(shù)是什么,以及服務(wù)對象的返回結(jié)果是什么)。WebService通過HTTP協(xié)議發(fā)送請求和接收結(jié)果時,發(fā)送的請求內(nèi)容和結(jié)果內(nèi)容都采用XML格式封裝,并增加了一些特定的HTTP消息頭,以說明HTTP消息的內(nèi)容格式,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議(simple object access protocol,簡單對象訪問協(xié)議) 。
SOAP協(xié)議= HTTP協(xié)議+ XML數(shù)據(jù)格式
SOAP協(xié)議是基于HTTP協(xié)議的,兩者的關(guān)系就好比高速公路是基于普通公路改造的,在一條公路上加上隔離欄后就成了高速公路。
商店的服務(wù)員只要收到了錢就給客戶提供貨物,商店服務(wù)員不用關(guān)心客戶是什么性質(zhì)的人,客戶也不用關(guān)心商店服務(wù)員是什么性質(zhì)的人。同樣,WebService客戶端只要能使用HTTP協(xié)議把遵循某種格式的XML請求數(shù)據(jù)發(fā)送給WebService服務(wù)器,WebService服務(wù)器再通過HTTP協(xié)議返回遵循某種格式的XML結(jié)果數(shù)據(jù)就可以了,WebService客戶端與服務(wù)器端不用關(guān)心對方使用的是什么編程語言。
?HTTP協(xié)議和XML是被廣泛使用的通用技術(shù),各種編程語言對HTTP協(xié)議和XML這兩種技術(shù)都提供了很好的支持,WebService客戶端與服務(wù)器端使用什么編程語言都可以完成SOAP的功能,所以,WebService很容易實現(xiàn)跨編程語言,跨編程語言自然也就跨了操作系統(tǒng)平臺
WSDL文件
? 好比我們?nèi)ド痰曩I東西,首先要知道商店里有什么東西可買,然后再來購買,商家的做法就是張貼廣告海報。WebService客戶端要調(diào)用一個WebService服務(wù),首先要有知道這個服務(wù)的地址在哪,以及這個服務(wù)里有什么方法可以調(diào)用,所以,WebService務(wù)器端首先要通過一個WSDL文件來說明自己家里有啥服務(wù)可以對外調(diào)用,服務(wù)是什么(服務(wù)中有哪些方法,方法接受的參數(shù)是什么,返回值是什么),服務(wù)的網(wǎng)絡(luò)地址用哪個url地址表示,服務(wù)通過什么方式來調(diào)用。
? WSDL(webservicedescription language)是基于XML格式的,它是WebService客戶端和服務(wù)器端都能理解的標準格式,其中描述的信息可以分為what,where,how等部分!?
WSDL文件保存在Web服務(wù)器上,通過一個url地址就可以訪問到它。客戶端要調(diào)用一個WebService服務(wù)之前,要知道該服務(wù)的WSDL文件的地址。WebService服務(wù)提供商可以通過兩種方式來暴露它的WSDL文件地址:
1.注冊到UDDI服務(wù)器,以便被人查找
2.直接告訴給客戶端調(diào)用者,例如,在自己網(wǎng)站給出信息或郵件告訴。
說明:
我們平常寫的程序都是在同一個程序中調(diào)用其他對象的方法,而webservice是怎樣實現(xiàn)調(diào)用其它計算機中的對象的方法的呢?
其基本原理是在客戶端程序的本地有一個代理對象,這個代理對象和遠程對象具有相同的方法聲明,這個代理程序不用我們自己編寫,工具可以幫我們生成。客戶端程序調(diào)用本地代理對象的方法時,代理對象會通過某種網(wǎng)絡(luò)傳送技術(shù)去聯(lián)系遠程的程序,遠程程序再調(diào)用代理對象請求的相應(yīng)本地對象的方法,然后將方法執(zhí)行的結(jié)果返回給客戶端代理程序。遠程調(diào)用技術(shù)就是要解決客戶端如何將請求信息傳送給遠程的程序,遠程的程序如何將結(jié)果回應(yīng)給客戶端,并且其實現(xiàn)技術(shù)對開發(fā)人員來說是透明的,即不需要開發(fā)人員自己的考慮和實現(xiàn)這些細節(jié)。
1.WSDL(網(wǎng)絡(luò)服務(wù)描述語言,WebServices Description Language)是一門基于 XML 的語言,用于描述 Web Services 以及如何對它們進行訪問。
2.UDDI 是一種目錄服務(wù),企業(yè)可以使用它對 Web services 進行注冊和搜索。
UDDI,英文為"Universal Description, Discovery and Integration",可譯為“通用描述、發(fā)現(xiàn)與集成服務(wù)”。