背景
1、SOAP:
什麼是SOAP
SOAP 是一種輕量級協議,用於在分散型、分佈式環境中交換結構化信息。 SOAP 利用
XML 技術定義一種可擴展的消息處理框架,它提供了一種可通過多種底層協議進行交換的消息結構。 這種框架的設計思想是要獨立於任何一種特定的編程模型和其他特定實現的語義。
SOAP版本之間的差別
SOAP V1.1 和 SOAP V1.2 都是萬維網聯盟 (W3C) 標準。可以部署不但支持 SOAP 1.1, 而且支持 SOAP 1.2 的 Web Service。從 SOAP 1.0 到 SOAP 1.2 規範所做的一些更改很重要,而其他更改則不太重要。SOAP 1.2 規範中包含對 SOAP 1.1 的一些更改。本文着重於 SOAP 的當前版本之間的重要差別。
對 SOAP 1.2 規範所做的重要更改包括下列更新:
- SOAP 1.1 基於 XML 1.0。SOAP 1.2 基於 XML 信息集。
XML 信息集提供使用 XSD 模式描述 XML 文檔的方法。然而,信息集並不一定使用 SOAP 1.1 所基於的 XML 1.0 序列化來序列化該文檔。這種描述 XML 文檔的新方法有助於顯示其他序列化格式,例如二進制協議格式。可以使用二進制協議來將消息壓縮成某一可能不需要某些詳細標記信息的壓縮格式。
在 SOAP 1.2 中,可以使用綁定至底層協議的規範確定在底層協議數據單元中使用的 XML 序列化。[SOAP 1.2 - Part 2] 中指定的 HTTP 綁定使用 XML 1.0 作爲 SOAP 消息信息集的序列化。
- 只要供應商遵從 SOAP 1.2 中定義的綁定框架,SOAP 1.2 就能夠提供正式定義傳輸協議(而不是使用 HTTP)的功能。雖然 HTTP 普遍存在,但它沒有其他傳輸協議(包括 TCP/IP 和 MQ)可靠。
- SOAP 1.2 更明確地定義了 SOAP 處理模型,該模型中除去了許多在缺少 Web Service 互操作性 (WS-I) 概要文件的情況下可能會導致互操作性錯誤的二義性。其目標是極大地減少使用 SOAP 1.2 實現的不同供應商之間出現互操作性問題的機會。
- “帶附件的 SOAP Java™ API” (SAAJ) 還可以作爲一種發出 SOAP 請求的簡單機制獨立出來。對 SAAJ 規範所做的主要更改是能夠表示 SOAP 1.1 消息和其他 SOAP 1.2 格式化消息。例如,SAAJ V1.3 在 SOAP 頭元素上引入了一組更有助於 SOAP 1.2 的新常量和方法(如 getRole() 和 getRelay())。工廠中還有其他方法供 SAAJ 使用以創建適當的 SOAP 1.1 或 SOAP 1.2 消息。
- 對於 SOAP 1.2,包絡和編碼模式的 XML 名稱空間已更改。這些更改使 SOAP 處理器能夠區分 SOAP 1.1 與 SOAP 1.2 消息,並支持 SOAP 模式中的更改,而不會影響現有實現。
- “針對 XML Web Service 的 Java 體系結構”(JAX-WS) 引入了同時支持 SOAP 1.1 和 SOAP 1.2 的功能。因爲 JAX-RPC 要求在運行時遍歷 SOAP 消息時處理該消息,所以需要在其相應 SOAP 上下文中表示該消息。在 JAX-WS 中,由於支持 SAAJ 1.3 而產生了許多其他增強功能。
- Web 服務描述語言 (WSDL) V1.1 規範不討論 SOAP 1.2。SOAP 1.2 在 WSDL 2.0 草稿版中討論。WSDL 1.1 僅定義如何在 WSDL 1.1 文檔中呈示 SOAP 1.1 有效內容。要解決如何表示基於 SOAP 1.2 的服務這一問題,有另一個 W3C 文檔,它定義如何在 WSDL 1.1 文檔中定義 SOAP 1.2 有效內容。有關 SOAP 1.2,請閱讀 WSDL 1.1 綁定擴展。
- SOAP 1.1 是單個文檔。SOAP 1.2 規範分爲以下幾部分:
- Part 0 是 SOAP 非標準簡介。
- Part 1 描述 SOAP 消息的結構、SOAP 處理模型和用於將 SOAP 綁定至底層協議的框架。一致性 SOAP 實現必須實現 Part 1 中的所有內容。
- Part 2 描述 SOAP 核心的可選加載件,其中包括數據模型和編碼、RPC 約定以及至 HTTP 的綁定。一致性 SOAP 實現可實現 Part 2 中的所有加載件。然而,如果實現了這些加載件,那麼這些加載件必須符合規範的相關部分。
2、SOAP1.2的改進:
SOAP 1.2提供了一個更嚴密、更可靠的規範集合,它基於對協議和XML序列化方案進行綁定的一個抽象模型。
SOAP 1.2 對語法進行了許多更改,並且提供了 SOAP 1.1 中所描述的語義的附加的、已明確的語義。“SOAP 1.2 入門”文檔列示並描述了這些語法更改。
3、SOAP 1.1 規範僅規範化了一種用於 HTTP 的協議綁定(由於 HTTP 的廣泛使用)。而在 SOAP 1.2 中是 application/soap+xml,能更好低支持WS相關協議。
看下SOAP的request的格式:
SOAP 1.1 request:
POST /WSShakespeare.asmx HTTP/1.1
Host: www.xmlme.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://xmlme.com/WebServices/GetSpeech"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetSpeech xmlns="http://xmlme.com/WebServices">
<Request>string</Request>
</GetSpeech>
</soap:Body>
</soap:Envelope>
SOAP 1.2 request:
POST /WSShakespeare.asmx HTTP/1.1
Host: www.xmlme.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<GetSpeech xmlns="http://xmlme.com/WebServices">
<Request>string</Request>
</GetSpeech>
</soap12:Body>
</soap12:Envelope>
格式的不同:
- SOAP 1.2 uses “application/soap+xml” as Content-Type and SOAP 1.1 uses “text/xml”.
- SOAP 1.2 does not use SOAPAction header line.
- SOAP 1.2 uses “http://www.w3.org/2003/05/soap-envelope” as the envolope namespace and SOAP 1.1 uses “http://schemas.xmlsoap.org/soap/envelope/”
參考:
http://www.w3.org/TR/2000/NOTE-SOAP-20000508/