開發webservice有一段時間了。但是對其中的協議及實現一直存在疑惑。這里搜集相關概念。用以更好的理解它。
一、什么是Webservice
WebService是一種跨編程語言和跨操作系統平台的遠程調用技術。
也就是說,不管你是java,還是.net 只要按照規范就可以進行通信。實現數據交互等。
這里說的"規范",WebService平台必須提供一套標准的類型系統,用於溝通不同平台、編程語言和組件模型中的不同類型系統。Webservice平台必須提供一種標准來描述Web service,讓客戶可以得到足夠的信息來調用這個Web service。最后,我們還必須有一種方法來對這個Web service進行遠程調用,這種方法實際是一種遠程過程調用協議(RPC)。Webservice 就是一種部署在網絡上的API。
RPC:即 Remote Procedure Call(遠程過程調用),說得通俗一點就是:調用遠程計算機上的服務,就像調用本地服務一樣。RPC 可基於 HTTP 或 TCP 協議,Web Service 就是基於 HTTP 協議的 RPC,它具有良好的跨平台性,但其性能卻不如基於 TCP 協議的 RPC。會兩方面會直接影響 RPC 的性能,一是傳輸方式,二是序列化。
就是一種實現RPC的協議有很多,比如最早的CORBA,Java RMI,Web Service的RPC風格,Hessian,Thrift,甚至Rest API。
WebService可以理解為實現RPC的一種方式,傳輸數據格式為XML,采用SOAP協議,RPC的實現方式為SOAP RPC。
二、Webservice 的實現
XML+XSD,SOAP和WSDL就是構成WebService平台的三大技術。
XML+XSD:XML Schema(XSD)定義了一套標准的數據類型,並給出了一種語言來擴展這套數據類型。WebService平台就是用XSD來作為其數據類型系統的。當你用某種語言(如VB.NET或C#)來構造一個Web service時,為了符合WebService標准,所有你使用的數據類型都必須被轉換為XSD類型。你用的工具可能已經自動幫你完成了這個轉換,但你很可能會根據你的需要修改一下轉換過程。
SOAP:
WebService通過HTTP協議發送請求和接收結果時,發送的請求內容和結果內容都采用XML格式封裝,並增加了一些特定的HTTP消息頭,以說明HTTP消息的內容格式,這些特定的HTTP消息頭和XML內容格式就是SOAP協議。SOAP提供了標准的RPC方法來調用Web Service。
SOAP協議 = HTTP協議 + XML數據格式
SOAP協議定義了SOAP消息的格式,SOAP協議是基於HTTP協議的,SOAP也是基於XML和XSD的,XML是SOAP的數據編碼方式。打個比喻:HTTP就是普通公路,XML就是中間的綠色隔離帶和兩邊的防護欄,SOAP就是普通公路經過加隔離帶和防護欄改造過的高速公路。
-
必需的 Envelope 元素,可把此 XML 文檔標識為一條 SOAP 消息
-
可選的 Header 元素,包含頭部信息
-
必需的 Body 元素,包含所有的調用和響應信息
-
可選的 Fault 元素,提供有關在處理此消息所發生錯誤的信息
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header> </soap:Header> <soap:Body> <soap:Fault> </soap:Fault> </soap:Body> </soap:Envelope>
WSDL:
描述服務是什么,(服務中有哪些方法,方法接受的參數是什么,返回值是什么),服務的網絡地址用哪個url地址表示,服務通過什么方式來調用。
WSDL(Web Services Description Language)就是這樣一個基於XML的語言,用於描述Web Service及其函數、參數和返回值。它是WebService客戶端和服務器端都能理解的標准格式。因為是基於XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的,這將是一個很大的好處。一些最新的開發工具既能根據你的Web service生成WSDL文檔,又能導入WSDL文檔,生成調用相應WebService的代理類代碼。
WSDL文件保存在Web服務器上,通過一個url地址就可以訪問到它。客戶端要調用一個WebService服務之前,要知道該服務的WSDL文件的地址。WebService服務提供商可以通過兩種方式來暴露它的WSDL文件地址:1.注冊到UDDI服務器,以便被人查找(這個應該意味着要有個服務中心)?;2.直接告訴給客戶端調用者。