WebService,ESB筆記


一、WebService是什么?

WebService,是RPC的一樣實現方式。

RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議

客戶端要能調用服務端必須遵循TCP協議,而WebService使用的是更高一級的HTTP協議。

客戶端訪問服務器的目的是為了獲取數據,那數據格式必須是與平台、語言無關的。WebService采用的是XML.

 

WebService的使用場景:ESB(企業服務總線)

如果一個企業存在多個使用不同語言開發的在用系統,數據傳遞和整合就顯得尤其麻煩,利用傳統連接各個系統的方法,存在如果新添加一個系統,都需要和每一個已經存在的系統建立關聯,集成系統的時候入侵性太強,往往伴隨着整體系統結構的改變。

所以在這種場景下,可在企業系統里搭建一根總線——ESB(企業服務總線),用來連接企業里各個系統的服務的。每個系統和總線連接起來,用XML傳輸數據。

把各系統連接到總線上以后,例如查詢銷售單,把請求拋給總線,由總線負責把消息帶到進銷存系統中去,再把結果按照應的規范傳到總線上,由總線負責把結果返回到財務系統中。若要增加額外的系統,如WebQQ,就只需要把他掛到ESB上就OK了。ESB也是一個應用模塊,負責把每個系統連接起來。

ESB全稱為EnterpriseServiceBus,即企業服務總線。

它是傳統中間件技術與XML、Web服務等技術結合的產物。ESB提供了網絡中最基本的連接中樞,是構築企業神經系統的必要元素。ESB的出現改變了傳統的軟件架構,可以提供比傳統中間件產品更為廉價的解決方案,同時它還可以消除不同應用之間的技術差異,讓不同的應用服務器協調運作,實現了不同服務之間的通信與整合。從功能上看,ESB提供了事件驅動和文檔導向的處理模式,以及分布式的運行管理機制,它支持基於內容的路由和過濾,具備了復雜數據的傳輸能力,並可以提供一系列的標准接口。

ESB不是萬能的,他不是一個應用程序框架,也不是一個企業應用的解決方案.它只是一個基於消息的調用企業服務的通信模塊!你可以把它嵌入到你的應用程序框架中,例如嵌入到spring容器里面,或者嵌入到工作流系統中.它的作用是對企業里面的SOA服務的調用提供一個框架和簡便的方法。

 

SOA

對於這一種架構,我們稱為SOA:面向服務的架構。要使用總線上掛的各個服務則需要對暴露的接口做一個描述。

第一,ESB怎么知道有哪些什么樣服務?那此時我們就得對暴露出去的服務做一個描述,而這個描述就是WSDL。

WSDL(WebServicesDescriptionLanguage):WS的描述語言。告訴總線自己暴露了哪些服務。

第二,查詢:我暴露了這個服務,要找到他則需要一個類似於DNS這樣的東西,用於服務的注冊、查詢,而這個就是UDDI。

UDDI(Universal Description,Discovery andIntegration):是一種目錄服務,用於統一地描述、發現和集成協議。UDDI定義如何查找WS(及其WSDL文件),可它並不像WSDL和SOAP一樣深入人心,因為很多時候,使用者都知道Web服務的位置(通常位於公司的企業內部網中)。

第三,傳輸數據:定義數據傳輸規范,這里都使用XML進行傳遞,把對象和XML進行轉換由SOAP規范。

SOAP(Simple Object Access Protocol):簡單對象訪問協議。是一種輕量的、簡單的、基於XML的協議,它被設計成在WEB上交換結構化的和固化的信息。

 

二、關於WebService

WS是一種基於Http協議和XMl技術,並使用WSDL描述和使用SOAP協議傳輸的異構系統解決方案。 跨語言、跨系統

我們把調用WS的應用程序稱為客戶端,把提供WS的應用程序稱為服務器端。

使用WS最重要的是什么:

        一是:WSDL文件(服務藐視);

        二是:對象與XML轉換(數據)。

WS和SOA的區別:

Web Service是技術規范,而SOA是設計原則,一種架構模式。

WSDL,UDDI和SOAP是SOA基礎的基礎部件。

WSDL:用來描述服務;

UDDI:用來注冊和查找服務;

SOAP:作為傳輸層,用來在客戶端和服務器端之間傳送消息。

 

三、關於WebService的常見標簽

1、 @WebService標簽

使用@WebService標簽,需要配置在類上,代表這是一個提供WS的服務類。

endpointInterface:定義服務抽象WebService 協定的服務端點接口的完整名稱。不允許在端點上使用此成員值,該元素的值必須有WebService標簽。默認情況下,服務器自動生成服務端接口。

name:服務接口名稱(對應wsdl: portType的name屬性,用在服務接口上);

serviceName:服務類名稱。默認為,實現類名+Service(對應service的name和definition上的name屬性對應,用在實現類上)。

portName:Web Service的端口名稱。此名稱被用作wsdl:port的名稱。

targetNamespace:目標命名空間,描述服務的預定義WSDL的位置(同時用在實現類和服務接口上,需統一)。

wsdlLocation:WSDL地址(服務端除了WSDL優先的情況外可不寫,客戶端代理接口上必須配置此屬性,指向web端WSDL文件地址)

 

2 @WebMethod標簽

使用@WebMethod標簽,需要把他配置到方法上。

operationName:指定暴露服務方法的別名。

exclude:是否暴露此標記的方法。

 

3 @WebResult標簽

使用@WebResult標簽,需要把他標記在方法上或者方法返回類型定義之前。

name:定義返回值的名稱。

header:布爾類型,是否把值放到header元素中進行傳遞。

 

4 @WebParam標簽

使用@WebParam標簽,需要把他標記在形參聲明之前。

name:定義傳遞時參數的名稱(默認參數以arg0,arg1…)。

header:布爾類型,是否把值放到header元素中進行傳遞。

 

5 @SOAPBinding

使用@ SOAPBinding標簽,需要把他標記在類上。

SOAPBinding.ParameterStyleparameterStyle 確定方法參數是否表示整個消息正文,或者參數是否是包裝在以操作命名的頂層元素中的元素。

SOAPBinding.ParameterStyle.WRAPPED,默認,使用對參數進行包裝

SOAPBinding.ParameterStyle.BARE,不對參數進行包裝

SOAPBinding.Style style 定義發 送到Web Service 的消息 和從Web Service發送的消息的編碼樣式。

SOAPBinding.Style.RPC:面向RPC

SOAPBinding.Style.DOCUMENT 默認,面向文檔

SOAPBinding.Useuse 定義發送到WebService的消息和從WebService發送的消息的格式樣式。

SOAPBinding.Use.LITERAL,默認,字面量風格,若服務端和客戶端不在一起開發,就應該使用這個

SOAPBinding.Use.ENCODED使用SOAP編碼風格,可能導致WS互操作方面失敗問題,盡量避免使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM