一 什麼是webservice(用你的話描述webservice)?在何時用webservice(webservice能給咱們解決什麼樣的問題)?程序員
一句話歸納:WebService是一種跨編程語言和跨操做系統平臺的遠程調用技術。web
所謂跨編程語言和跨操做平臺,就是說服務端程序採用Java編寫,客戶端程序則能夠採用其餘編程語言編寫,反之亦然!跨操做系統平臺則是指服務端程序和客戶端程序能夠在不一樣的操做系統上運行。spring
所謂遠程調用,就是一臺計算機a上的一個程序能夠調用到另一臺計算機b上的一個對象的方法。譬如從天氣預報系統中獲取某個城市的天氣數據在本身系統中進行展現;從證券交易系統中獲取某隻股票的交易信息在本身的系統中進行展現;又譬如一個商城系統中可以展現快遞的跟蹤信息,而這些信息就是經過webservice從具體的快遞公司的系統中獲取的數據。編程
其實能夠從多個角度來理解WebService,從表面上看,WebService就是一個應用程序向外界暴露出一個能經過Web進行調用的API,也就是說能用編程的方法經過Web來調用這個應用程序。咱們把調用這個WebService的應用程序叫作客戶端,而把提供這個WebService的應用程序叫作服務端。從深層次看,WebService是創建可互操做的分佈式應用程序的新平臺,是一個平臺,是一套標準。它定義了應用程序如何在Web上實現互操做性,你能夠用任何你喜歡的語言,在任何你喜歡的平臺上寫Web service ,只要咱們能夠經過Web service標準對這些服務進行查詢和訪問。瀏覽器
二.WSDL是什麼,有什麼做用?服務器
WSDL是web service definition language的縮寫,即web service的定義(描述)語言。架構
怎樣向別人介紹你的 web service 有什麼功能,以及每一個函數調用時的參數呢?你可能會本身寫一套文檔,你甚至可能會口頭上告訴須要使用你的web service的人。這些非正式的方法至少都有一個嚴重的問題:當程序員坐到電腦前,想要使用你的web service的時候,他們的工具(如Visual Studio)沒法給他們提供任何幫助,由於這些工具根本就不瞭解你的web service。解決方法是:用機器能閱讀的方式提供一個正式的描述文檔。web service描述語言(WSDL)就是這樣一個基於XML的語言,用於描述web service及其函數、參數和返回值。由於是基於XML的,因此WSDL既是機器可閱讀的,又是人可閱讀的,這將是一個很大的好處。一些最新的開發工具既能根據你的web service生成WSDL文檔,又能導入WSDL文檔,生成調用相應web service的代碼。框架
Webservice服務發佈以後,經過瀏覽器訪問發佈的+?wsdl便可得到wsdl文檔。編程語言
三.WSDL文檔主要有那幾部分組成,分別有什麼做用?分佈式
一個WSDL文檔的根元素是definitions元素,WSDL文檔包含7個重要的元素:types, import, message, portType, operations, binding和service元素。
一、 definitions元素中通常包括若干個XML命名空間;
二、 Types元素用做一個容器,定義了自定義的特殊數據類型,在聲明消息部分(有效負載)的時候,messages定義使用了types元素中定義的數據類型與元素;
三、 Import元素可讓當前的文檔使用其餘WSDL文檔中指定命名空間中的定義;
四、 Message元素描述了Web服務的有效負載。至關於函數調用中的參數和返回值;
五、 PortType元素定義了Web服務的抽象接口,它能夠由一個或者多個operation元素,每一個operation元素定義了一個RPC樣式或者文檔樣式的Web服務方法;
六、 Operation元素要用一個或者多個messages消息來定義它的輸入、輸出以及錯誤;
七、 Binding元素將一個抽象的portType映射到一組具體的協議(SOAP或者HTTP)、消息傳遞樣式(RPC或者document)以及編碼樣式(literal或者SOAP encoding);
八、 Service元素包含一個或者多個Port元素
每個Port元素對應一個不一樣的Web服務,port將一個URL賦予一個特定的binding,經過location實現。
可使兩個或者多個port元素將不一樣的URL賦給相同的binding。
四.SOAP是什麼?
SOAP是simple object access protocal的縮寫,即簡單對象訪問協議。 是基於XML和HTTP的一種通訊協議。是webservice所使用的一種傳輸協議,webservice之因此可以作到跨語言和跨平臺,主要是由於XML和HTTP都是獨立於語言和平臺的。Soap的消息分爲請求消息和響應消息,一條SOAP消息就是一個普通的XML文檔,包含下列元素:
一、 必需的 Envelope 元素,可把此XML文檔標識爲一條SOAP消息
二、 可選的 Header 元素,包含頭部信息
三、 必需的 Body 元素,包含全部的調用和響應信息
四、 可選的 Fault 元素,提供有關在處理此消息所發生錯誤的信息
Soap請求消息
Soap響應消息
五.怎麼理解UDDI?
UDDI是Universal Description Discovery and Integration的縮寫,即統一描述、發現和整合規範。用來註冊和查找服務,把web services收集和存儲起來,這樣當別人訪問這些信息的時候就從UDDI中查找,看有沒有這個信息存在。
五.Webservice的SEI指什麼?
WebService EndPoint Interface(webservice終端[Server端]接口)
就是 WebService服務器端用來處理請求的接口
六.說說你知道的webservice框架,他們都有什麼特色?
Webservice經常使用框架有JWS、Axis二、XFire以及CXF。
下面分別介紹一個這幾種Web Service框架的基本概念
一、JWS是Java語言對WebService服務的一種實現,用來開發和發佈服務。而從服務自己的角度來看JWS服務是沒有語言界限的。可是Java語言爲Java開發者提供便捷發佈和調用WebService服務的一種途徑。
二、Axis2是Apache下的一個重量級WebService框架,準確說它是一個Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能製做和發佈WebService,並且能夠生成Java和其餘語言版WebService客戶端和服務端代碼。這是它的優點所在。可是,這也不可避免的致使了Axis2的複雜性,使用過的開發者都知道,它所依賴的包數量和大小都是很驚人的,打包部署發佈都比較麻煩,不能很好的與現有應用整合爲一體。可是若是你要開發Java以外別的語言客戶端,Axis2提供的豐富工具將是你不二的選擇。
三、XFire是一個高性能的WebService框架,在Java6以前,它的知名度甚至超過了Apache的Axis2,XFire的優勢是開發方便,與現有的Web整合很好,能夠融爲一體,而且開發也很方便。可是對Java以外的語言,沒有提供相關的代碼工具。XFire後來被Apache收購了,緣由是它太優秀了,收購後,隨着Java6 JWS的興起,開源的WebService引擎已經再也不被看好,漸漸的都敗落了。
四、CXF是Apache旗下一個重磅的SOA簡易框架,它實現了ESB(企業服務總線)。CXF來自於XFire項目,通過改造後造成的,就像目前的Struts2來自WebWork同樣。能夠看出XFire的命運會和WebWork的命運同樣,最終會淡出人們的視線。CXF不可是一個優秀的Web Services / SOAP / WSDL 引擎,也是一個不錯的ESB總線,爲SOA的實施提供了一種選擇方案,固然他不是最好的,它僅僅實現了SOA架構的一部分。
注:對於Axis2與CXF之間的關係,一個是Axis2出現的時間較早,而CXF的追趕速度快。
如何抉擇:
一、若是應用程序須要多語言的支持,Axis2應當是首選了;
二、若是應用程序是遵循 spring哲學路線的話,Apache CXF是一種更好的選擇,特別對嵌入式的Web Services來講;
三、若是應用程序沒有新的特性須要的話,就還是用原來項目所用的框架,好比 Axis1,XFire,Celtrix或BEA等等廠家本身的Web Services實現,就別勞民傷財了。
七.你的系統中是否有使用到webservice開發,具體是怎麼實現的?
若是你以爲本身掌握的不夠好,對本身不夠自信的能夠回答爲「個人系統中沒有使用到webservice的開發,可是我掌握webservice開發的概念和流程」,而後能夠給他講講相關的概念,也就是上面的這些問題的回答,這樣能夠繞過這個問題,由於並非全部的系統都會涉及到webservice的開發。
另外一種回答便是先給他介紹一種webservice開發框架,好比CXF,而後告訴他你作的是服務端開發仍是客戶端開發,若是你說你作的事服務端開發,那麼你就告訴他怎麼定義的webservice,使用了哪些註解,怎麼跟spring進行的整合,怎麼發佈的服務等等;若是你告訴他你作的事客戶端的開發,那麼你能夠告訴他你怎麼生成的本地代碼,而後又怎麼經過本地代碼去調用的webservice服務。