1. 程式人生 > >Webservice soap wsdl區別之個人見解

Webservice soap wsdl區別之個人見解

  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啦。