天天看點

Webservice soap wsdl差別之個人見解

原文:http://blog.csdn.net/pautcher_0/article/details/6798351

Web Service實作業務訴求:Web Service是真正“辦事”的那個,提供一種辦事接口的統稱。

WSDL提供“能辦的事的文檔說明”:對要提供的服務的一種描述格式。我想幫你的忙,但是我要告訴你我都能幹什麼,以及幹這些事情需要的參數類型。

SOAP 提供“請求”的規範:向服務接口傳遞請求的格式,包括方法和參數等。你想讓人家辦事,總得告訴人家你想幹什麼吧,SOAP就是定義這個“請求”的格式的, 按照SOAP定義的“請求”格式“書寫”請求就可以保證Web Service能夠正确的解讀你想讓它幹什麼以及你為它提供了什麼參數。在這個請求中,你需要描述的主要問題有:向哪個Web Service發送請求,請求的參數類型、參數值、傳回值類型。這些都“填寫”完畢,也就完成了符合SOAP規範的SOAP消息。

wsdl和soap雖然是web service的兩大标準,但是兩者并沒有必然的聯系,都可以獨立使用。

wsdl提供了一個統一的接口,目前已經成為一個國際上公認的标準,通過wsdl提供的接口可以通路不同類型的資源(如java、c#、C、C、C++

等),因為wsdl是基于xml,與語言平台無關的。另外wsdl提供了binding和service元素,用以綁定接口到具體的服務,實作了接口與實

現的分離。

soap(簡單對象通路協定)是一種基于http的傳輸協定,用來通路遠端服務

wsdl與soap的關系在于:wsdl綁定服務的時候可以設定使用的協定,協定可以是soap、http、smtp、ftp等任何一種傳輸協定,除此以

外wsdl還可以綁定jms、ejb及local

java等等,不過都是需要對binding和service元素做擴充的,而且需要擴充伺服器的功能以支援這種擴充

soap協定是一種請求和應答協定規範,而http是web傳輸協定,soap的傳輸是可以基于http的,但也可以基于其他的傳輸協定,如ftp、smtp等。

簡單對象通路協定(SOAP)是W3C組織的一個

Note,

它描述了一種在分散的或分布式的環境中如何交換資訊的輕量級協定。SOAP是一個基于XML的協定,它包括三個部分:SOAP封裝(Envelop),封

裝定義了一個描述消息中的内容是什麼,是誰發送的,誰應當接受并處理它以及如何處理它們的架構;SOAP編碼規則(Encoding

Rules),用于表示應用程式需要使用的資料類型的執行個體;SOAP RPC表示(RPC

Representation),表示遠端過程調用和應答的協定;SOAP可以和多種傳輸協定綁定(Binding),使用底層協定交換資訊。在這個文檔

中,目前隻定義了SOAP如何和HTTP以及HTTP擴充進行綁定的架構。

SOAP是個通信協定, SOAP在HTTP協定的基礎上,把編寫成XML的REQUEST參數, 放在HTTP BODY上送出個WEB

SERVICE伺服器(SERVLET,ASP什麼的) 處理完成後,結果也寫成XML作為RESPONSE送回使用者端, 為了使使用者端和WEB

SERVICE可以互相對應,可以使用WSDL作為這種通信方式的描述檔案,利用WSDL工具可以自動生成WS和使用者端的架構檔案,SOAP具備把複雜對

象序列化捆綁到XML裡去的能力。

SOAP的前身是RPC, 就是遠端呼叫處理的協定,這個協定安全性不是很好,多數防火牆都會阻擋RPC的通信包,而SOAP則使用HTTP協定作為基本的協定,使用端口80使得SOAP可以透過防火牆,完成RPC的功能。

SOAP協定和HTTP協定一樣,都是底層的通信協定,隻是請求包的格式不同而已,SOAP包是XML格式的,現在我們編寫WEB

SERVICE不需要深入了解SOAP也沒關系。如果SERVICE和CLIENT在同樣的環境下使用SOAP,由于一般情況下都有自動生成SOAP程式

架構的工具,是以不知道細節也沒關系. 可是,

如果CLIENT和SERVICE的環境不同,比如說JAVA的Client和.NET的SERVICE進行通信,或者是VB

CLIENT和TOMCAT下的JAVA SERVICE通信,還是要知道一點細節為好.

特别是, WSDL或者UDDI都不是标準,如果不讓用就隻好手工配制SOAP MESSAGE啦。