Java程序員從笨鳥到菜鳥之(一百零八)一步一步學習webservice(二)webservice基本原理 .

分類: 學習專區 Java程序員從笨鳥到菜鳥 webservice 152人閱讀 評論(1) 收藏 舉報


       本來這第二篇打算講解“開發第一個基於XFirewebservice”的內容來着。但是想想。開發實例只是侷限於了會用的層面上。如果想真正的理解webservice還是需要挖掘其原理。所以本篇文章我想還是和大家一起來學習一下webservice的原理吧。知其原理,應用直接就是小case了。在學習webservice的原理之前。我想還是有必要弄清另一個概念—SOA.這個概念在很多學術論文和文章中經常和webservice一起被提起。剛開始我一直不理解這兩個概念的關係。所以我們先來看一下SOA.


        SOA是英文Service-Oriented Architecture,即面向服務架構的縮寫。 在有關書籍中他是這個定義的:SOA指爲了解決在Internet環境下業務集成的需要,通過連接能完成特定任務的獨立功能實體實現的一種軟件系統架構從這個定義中定義者希望表達的前提有下面兩點:

 
1) 軟件系統架構:SOA不是一種語言,也不是一種具體的技術而是一種軟件系統架構,它嘗試給出在特定環境下推薦採用的一種架構從這個角度上來說,它更像一種模式(Pattern)。因此它與很多已有的軟件技術比如面向對象技術,是互補的而非互斥的。它們分別面向不同的應用場景,用來滿足不同的特定需求。   

2) SOA的使用範圍:需求決定同時也限制功能。SOA並不是包治百病的萬靈丹,它最主要的應用場合在於解決在Internet環境下的不同商業應用之間的業務集成問題



從上面的定義其實我們不難發現。其實webservice簡單來說就是SOA的一種體現形式。下面我們來看一下有關webservice的原理解釋


WebService是一種跨編程語言和跨操作系統平臺的遠程調用技術


       所謂遠程調用,就是一臺計算機a上的一個程序可以調用到另外一臺計算機b上的一個對象的方法,譬如,銀聯提供給商場的pos刷卡系統(採用交互提問的方式來加深大家對此技術的理解)。


      遠程調用技術有什麼用呢?商場的POS機轉賬調用的轉賬方法的代碼是在銀行服務器上,還是在商場的pos機上呢?什麼情況下可能用到遠程調用技術呢?例如,amazon,天氣預報系統,淘寶網,校內網,百度等把自己的系統服務以webservice服務的形式暴露出來,讓第三方網站和程序可以調用這些服務功能,這樣擴展了自己系統的市場佔有率,往大的概念上吹,就是所謂的SOA應用。


      所謂跨編程語言和跨操作平臺,就是說服務端程序採用java編寫,客戶端程序則可以採用其他編程語言編寫,反之亦然!跨操作系統平臺則是指服務端程序和客戶端程序可以在不同的操作系統上運行。

      除了WebService外,常見的遠程調用技術還有RMIRemote method invoke)和CORBA,由於WebService的跨平臺和跨編程語言特點,因此比其他兩種技術應用更爲廣泛,但性能略低。

 


WebService使用SOAP協議實現跨編程語言和跨操作系統平臺


     WebService 採用HTTP協議傳輸數據,採用XML格式封裝數據(即XML中說明調用遠程服務對象的哪個方法,傳遞的參數是什麼,以及服務對象的返回結果是什麼)。 WebService通過HTTP協議發送請求和接收結果時,發送的請求內容和結果內容都採用XML格式封裝,並增加了一些特定的HTTP消息頭,以說明 HTTP消息的內容格式,這些特定的HTTP消息頭和XML內容格式就是SOAP協議(simple object access protocol,簡單對象訪問協議


SOAP協議= HTTP協議+ XML數據格式


SOAP協議是基於HTTP協議的,兩者的關係就好比高速公路是基於普通公路改造的,在一條公路上加上隔離欄後就成了高速公路。商店的服務員只要收到了錢就給客戶提供貨物,商店服務員不用關心客戶是什麼性質的人,客戶也不用關心商店服務員是什麼性質的人。同樣,WebService 客戶端只要能使用HTTP協議把遵循某種格式的XML請求數據發送給WebService服務器,WebService服務器再通過HTTP協議返回遵循 某種格式的XML結果數據就可以了,WebService客戶端與服務器端不用關心對方使用的是什麼編程語言。

       HTTP協議和XML是被廣泛使用的通用技術,各種編程語言對HTTP協議和XML這兩種技術都提供了很好的支持,WebService客戶端與服務器端使用什麼編程語言都可以完 成SOAP的功能,所以,WebService很容易實現跨編程語言,跨編程語言自然也就跨了操作系統平臺

 

WSDL文件

      好比我們去商店買東西,首先要知道商店裏有什麼東西可買,然後再來購買,商家的做法就是張貼廣告海報。WebService客戶端要調用一個 WebService服務,首先要有知道這個服務的地址在哪,以及這個服務裏有什麼方法可以調用,所以,WebService務器端首先要通過一個 WSDL文件來說明自己家裏有啥服務可以對外調用,服務是什麼(服務中有哪些方法,方法接受的參數是什麼,返回值是什麼),服務的網絡地址用哪個url地 址表示,服務通過什麼方式來調用。

    WSDLwebservicedescription language)是基於XML格式的,它是WebService客戶端和服務器端都能理解的標準格式,其中描述的信息可以分爲what,where,how等部分

      WSDL文件保存在Web服務器上,通過一個url地址就可以訪問到它。客戶端要調用一個WebService服務之前,要知道該服務的WSDL文件的地址。WebService服務提供商可以通過兩種方式來暴露它的WSDL文件地址:


1.註冊到UDDI服務器,以便被人查找

2.直接告訴給客戶端調用者,例如,在自己網站給出信息或郵件告訴。


WebServices體系架構 


下面我們就來看一下Web Services的體系結構--面向服務的體系結構。如圖:


                                               

                                                                            Web Services的體系結構



圖可以看出,SOA結構中共有三種角色:

(1) Service provider:服務提供商,發佈自己的服務,並且對使用自身服務的請求進行響應

(2) Service broker服務註冊中心,註冊已經發布的Service provider,對其進行分類,並提供搜索服務,這是可搜索的服務描述註冊中心,服務提供者在此發佈他們的服務描述。在靜態綁定開發或動態綁定執行期間,服務請求者查找服務並獲得服務的綁定信息(在服務描述中)。對於靜態綁定的服務請求者,服務註冊中心是體系結構中的可選角色,因爲服務提供者可以把描述直接發送給服務請求者。同樣,服務請求者可以從服務註冊中心以外的其它來源得到服務描述,例如本地文件、FTP 站點、Web 站點、廣告和服務發現(Advertisement and Discovery of ServicesADS)或發現 Web 服務(Discovery of Web ServicesDISCO)

(3) Service Requester:服務請求者,利用Service broker查找所需的服務,然後使用該服務



SOA體系結構中的組件必須具有上述一種或多種角色。在這些角色之間使用了三種操作:

(1) Publish操作:使Service Provider可以向Service Broker註冊自己的功能及訪問接口

(2) Find操作:使Service Requester可以通過Service Broker查找特定種類的服務。

(3) Bind操作:使Service Requester能夠真正使用Service provider

爲支持結構中的三種操作(publishfindbind)SOA需要對服務進行一定的描述,這種服務描述(Service Description)應具有下面幾個重要特點:首先,它要聲明Service provider的語義特徵。Service broker使用語義特徵將Service provider進行分類,以幫助具體服務的查找。Service requester根據語義特徵來匹配那些滿足要求的Service provider。(因此,語義特徵中重要的一點就是對Service provider的分類。)其次,服務描述應該聲明接口特徵,以訪問特定的服務。最後,服務描述還應聲明各種非功能特徵,如安全要求,事務要求,使用Service provider的費用等等。接口特徵和非功能特徵也可以用來幫助Service requesterService provider的查找。

 

Web 服務的構件


Web Services的構件可以通過下圖給出了清晰的描述。


                               web Services構件模型

                          



(1) 服務在這裏,Web 服務是一個由服務描述來描述的接口,服務描述的實現就是該服務。服務是一個軟件模塊,它部署在由服務提供者提供的可以通過網絡訪問的平臺上。服務存在就是要被服務請求者調用或者同服務請求者交互。當服務的實現中利用到其它的Web 服務時,它也可以作爲請求者。當然更爲重要的是:我們需要發現服務,這就要藉助UDDI等技術來完成。

(2) 服務描述服務描述包含服務的接口和實現的細節。其中包括服務的數據類型、操作、綁定信息和網絡位置。還可能包括可以方便服務請求者發現和利用的分類及其它元數據。服務描述可以被髮布給服務請求者或服務註冊中心。Web 服務體系結構解釋瞭如何實例化元素和如何以一種可以互操作的方式實現這些操作。這一部分是通過WSDL——Web Services描述語言來實現。

(3) 消息格式這部分通常指的就是Web Services的內容需要進行展示所要支持消息格式,它用SOAP——簡單對象訪問協議,即在分散或分佈式的環境中交換信息的簡單的協議,是一個基於XML的協議。

(4) 編碼任何發佈出去的Web Services都要求以XML文件的形式,展現給用戶或請求者,因爲XML相當於另一個層面上的接口,不同的商家或單位都可通過將提供商發佈的基於XMLWeb Services數據提取出來,然後與自己的相關係統或軟件產品集成,也就相當於提供商實現Web Services的同時也會使用者定義了一個標準。

(5) 傳輸這一部分就是計算機網絡的應用,即提供商的Web Services最終會以什麼渠道傳輸,比如:HTTPSMTP等。

  

參考:http://blog.csdn.net/eefesa/article/details/1890094

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章