一、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互操作方面失敗問題,盡量避免使用。
