(文摘)徹底理解webservice SOAP WSDL

雲霏霏發表於2014-11-21

WebServices特點介紹

WebServices 提供一個建立分散式應用的平臺,使得執行在不同作業系統和不同裝置上的軟體,或者是用不同的程式語言和不同廠商的軟體開發工具開發的軟體,所有可能的已開發和部署的軟體,能夠利用這一平臺實現分散式計算的目的。WebServices的思想是:使得應用程式也具有 Web 分散式程式設計模型的鬆散耦合性。

WebServices體系結構

在Web 服務的體系結構中,涉及到三個角色,

一個是 Web 服務提供者,一個是 Web 服務中介者,還有一個就是 Web 服務請求者,

同時還涉及到三類動作,即釋出,查詢,繫結,

Web 服務提供者:

可以釋出 Web 服務,並且對使用自身服務的請求進行響應,

Web 服務的擁有者,它會等待其他的服務或者是應用程式訪問自己。

Web 服務請求者:

也就是 Web 服務功能的使用者,它通過服務註冊中心也就是 Web 服務中介者查詢到所需要的服務,

再利用 SOAP 訊息向 Web 服務提供者傳送請求以獲得服務。

Web 服務中介者:

也稱為服務代理,用來註冊已經發布的 Web服務提供者,並對其進行分類,同時提供搜尋服務,

簡單來說的話,Web 服務中介者的作用就是把一個 Web 服務請求者和合適的 Web 服務提供者聯絡在一起,

充當一個管理者的角色,一般是通過 UDDI來實現。

釋出:

通過釋出操作,可以使 Web服務提供者向 Web 服務中介者註冊自己的功能以及訪問的介面。

發現(查詢):

使得 Web 服務請求者可以通過 Web 服務中介者來查詢到特點的種類的 Web 服務。

繫結:

這裡就是實現讓服務請求者能夠使用服務提供者提供的服務了。

  

WebServices三種基本元素之 SOAP

SOAP 即 Simple Object AccessProtocol 也就是簡單物件訪問協議。

SOAP 呢,其指導理念是“唯一一個沒有發明任何新技術的技術”,

是一種用於訪問 Web 服務的協議。

因為 SOAP 基於XML 和 HTTP ,其通過XML 來實現訊息描述,然後再通過 HTTP 實現訊息傳輸。

SOAP 是用於在應用程式之間進行通訊的一種通訊協議。

因為是基於 XML 和HTTP 的,所以其獨立於語言,獨立於平臺,並且因為 XML 的擴充套件性很好,

所以基於 XML 的 SOAP 自然擴充套件性也不差。

通過 SOAP 可以非常方便的解決網際網路中訊息互聯互通的需求,

其和其他的 Web 服務協議構建起 SOA 應用的技術基礎。

SOAP 協議的一個重要特點是它獨立於底層傳輸機制,Web 服務應用程式可以根據需要選擇自己的資料傳輸協議,

可以在傳送訊息時來確定相應傳輸機制。

由於 HTTP 協議本身的一些特點和侷限性,

使得當 SOAP 使用HTTP 繫結的 Web 服務並不能滿足某些企業應用的需求。

比如,HTTP 不是一個可靠傳輸協議,所以有可能在傳輸過程中出現問題,

然後 HTTP 協議基於Request/Response 模型,也就是說客戶端需要在等待響應訊息接收完成後才能繼續執行,

而此時如果響應時間過長呢?

基於上面的這些需求,便需要選擇合適的傳輸協議了。

關於這方面的內容的話,有點深奧了,有興趣的可以去看看 IBM 的一些關於這方面內容的介紹。

還有一點需要提及一下,那就是 SOAP 是可以繞過防火牆的,將來將會作為 W3C 的標準進行發展。

 

WebServices三種基本元素之 WSDL

WSDL 即Web Services Description Language也就是 Web 服務描述語言。

是基於 XML的用於描述 Web 服務以及如何訪問 Web 服務的語言。

服務提供者通過服務描述將所有用於訪問 Web服務的規範傳送給服務請求者,

要實現 Web服務體系結構的鬆散耦合,服務描述是一個關鍵,

不管是請求者還是服務提供者,通過服務描述便可以不必瞭解對方的底層平臺,程式語言等,

服務描述與底層的 SOAP 基礎結構相結合,

足以封裝服務請求者的應用程式和服務提供者的 Web服務之間的這個細節。

WSDL 描述了 Web服務的三個基本屬性:

(1)服務所提供的操作

(2)如何訪問服務

(3)服務位於何處(通過 URL 來確定就 OK 了)

WebServices三種基本元素之 UDDI

UDDI 即 Universal Description,Discovery and Integration,也就是通用的描述,發現以及整合。

WSDL 呢,用來描述了訪問特定的 Web 服務的一些相關的資訊,可以在網際網路上,

或者是在企業的不同部門之間,如何來發現我們所需要的 Web 服務呢?

而 Web 服務提供商又如何將自己開發的 Web 服務公佈到因特網上,

這就需要使用到 UDDI 了,UDDI的話,是一個跨產業,跨平臺的開放性架構,

可以幫助 Web 服務提供商在網際網路上釋出 Web 服務的資訊。

UDDI 呢是一種目錄服務,企業可以通過 UDDI 來註冊和搜尋 Web 服務。

簡單來時候話,UDDI 就是一個目錄,只不過在這個目錄中存放的是一些關於 Web 服務的資訊而已。

並且 UDDI 通過SOAP 進行通訊,構建於 . Net 之上。

開發 Web服務的方式

(1)開發階段:

        實現一個 Web 服務,使這個 Web 服務能響應和接收 SOAP 訊息,

      (這個呢,其實可以通過 Visual Studio 來幫助實現),

       定義好邏輯模組(這個 Web 服務總要乾點事情吧),

       然後再撰寫 WSDL 檔案(這個呢,開發工具會自動生成的,不需要人工撰寫了)

(2)部署階段:

       指定 Web 服務的傳輸協議,將 Web 服務註冊到相應服務描述部署檔案(這些也是可以由工具來自動完成的)

(3)釋出階段:

       將 Web 服務的介面和呼叫的地址公開給客戶端呼叫,

       常用的釋出方式為基於 Web 提供的WSDL 的連結,當然 UDDI 也是一個選擇。

 

總結一下 WebServices的優點

其實呢,前面介紹的都是關於 WebServices 的優點,在這裡就只是淺要的總結一下了。

首先,WebServices 是基於 Internet 和異構平臺的應用,

這樣便可以方便的實現通過網路來通訊,同時可以實現在不同的平臺之間共享資料。

然後就是,WebServices 是基於 XML 和HTTP 的,

也就是基於標準和開放的,基於 XML 的話,擴充套件性自然好,自然跨語言。

基於 HTTP 的話,自然跨平臺了。

最後,再回憶一下 WebServices 是一種應用程式元件吧,這樣便可以將 WebServices 重複使用了。

 談談 WebServices 的缺點

首先就是由於 XML 檔案的難以解析,所以在使用 Web 服務的時候,會消耗較多的 CPU 和記憶體資源,

而後,SOAP 是基於XML 的,所以在網路傳輸中傳輸的是 XML 檔案,

但是由 XML 檔案相比於二進位制檔案來說,要大很多,自然就會消耗更多的網路資源了。

而後,由於通過 WSDL 解耦了Web 服務提供者和請求者,且 SOAP 訊息時從傳送者向接收者單向傳送的,

這在一定程度上造成了 WebServices 是一種無狀態服務,

儘管現在在 . Net 中可以通過 Session 來實現在客戶端和服務端共享一些資料,

但是單單依靠 Session 來實現客戶端和服務端的狀態互動也太牽強了吧

WebServices 在資料繫結上也存在一些缺陷,

因為所有的資料在傳輸中都是使用的 XML 來實現的,

因此,需要在二進位制資料和 XML 之間進行一個轉換(通過序列化和反序列化來實現),

而在轉換過程中有可能出現語義丟失的情況。

最後就是 WebServices 的技術要求相對比較高,

因為涉及到底層的 HTTP 協議以及SOAP ,WSDL 和UDDL 這三大平臺元素,

所以學習的曲線也是比較長的,

當然,在 . Net 中可以通過 Visual Studio 非常快速和簡單的開發和訪問一個 Web 服務,

但這隻限於在簡單的使用上,而對於本質的東西,是比較難的。

 

 原文: http://wenku.baidu.com/view/f87b55f19e31433239689314.html

 

相關文章