?? soap規范(1).txt
字號:
作者:bdsc
email: bdscca@yahoo.ca
日期:2001-7-13 17:02:54
SOAP:簡單對象訪問協議
(2001-1-1)
摘要
SOAP是用在分散或分布的環境中交換信息的簡單的協議,它是一個基于XML的協議,包括三個部分:封裝定義了一個描述消息中包含什么內容以及如何處理它們的框架,編碼規則用于表示應用程序定義的數據類型的實例,另外還有一個表示遠程過程調用和應答的協定。SOAP被設計為可以與各種其它協議結合使用;但這篇文章僅描述如何將SOAP和HTTP及HTTP擴展框架相結合。
目錄
1. 簡介
1.1 設計目標
1.2 符號協定
1.3 SOAP消息舉例
2. SOAP消息交換模型
3. 與XML的關系
4. SOAP封裝
4.1.1 SOAP encodingStyle屬性
4.1.2 封裝版本模型
4.2 SOAP頭
4.2.1 使用SOAP頭屬性
4.2.2 SOAP actor屬性
4.2.3 SOAP mustUnderstand屬性
4.3 SOAP體
4.3.1 SOAP頭和體的關系
4.4 SOAP 錯誤
4.4.1 SOAP錯誤代碼
5. SOAP編碼
5.1 XML編碼類型規則
5.2 簡單類型
5.2.1 字符串
5.2.2 枚舉
5.2.3 字符數組
5.3 多態 Accessor
5.4 復合類型
5.4.1 復合值和對值的引用
5.4.2 數組
5.4.2.1 PartiallyTransmitted Arrays
5.4.2.2 稀疏數組
5.4.3 一般復合類型
5.5 缺省值
5.6 SOAP root屬性
6. 在HTTP中使用SOAP
6.1 SOAP HTTP請求
6.1.1 HTTP頭中的SOAPAction域
6.2 SOAP HTTP應答
6.3 HTTP擴展框架
6.4 SOAP HTTP舉例
7. 用SOAP表示RPC
7.1 RPC和SOAP體
7.2 RPC和SOAP頭
8. 安全考慮
9. 參考文獻
A. SOAP封裝舉例
A.1 請求編碼舉例
A.2 應答編碼舉例
1. 簡介
SOAP以XML形式提供了一個簡單、輕量的用于在分散或分布環境中交換結構化和類型化信息的機制。SOAP本身并沒有定義任何應用程序語義,如編程模型或特定語義的實現;實際上它通過提供一個有標準組件的包模型和在模塊中編碼數據的機制,定義了一個簡單的表示應用程序語義的機制。這使SOAP能夠被用于從消息傳遞到RPC的各種系統。
SOAP包括三個部分
SOAP封裝(見第4節)結構定義了一個整體框架用來表示消息中包含什么內容,誰來處理這些內容以及這些內容是可選的或是必需的。
SOAP編碼規則(見第5節)定義了用以交換應用程序定義的數據類型的實例的一系列機制。
SOAP RPC表示(見第7節)定義了一個用來表示遠程過程調用和應答的協定。
雖然這三個部分都作為SOAP的一部分一起描述,但它們在功能上是相交的。特別的,封裝和編碼規則是在不同的名域中定義的,這種模塊性的定義方法增加了簡單性。
在SOAP封裝,SOAP編碼規則和SOAP RPC協定之外,這個規范還定義了兩個協議的綁定,描述了在有或沒有HTTP擴展框架[6]的情況下,SOAP消息如何包含在HTTP消息[5]中被傳送。
1.1 設計目標
SOAP的主要設計目標是簡單性和可擴展性,這意味著傳統的消息系統和分布對象系統的某些性質不是SOAP規范的一部分。這些性質包括:
分布式碎片收集
成批傳送消息
對象引用(要求分布式碎片收集)
激活機制(要求對象引用)
1.2 符號約定
這篇文章中的關鍵字 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 和"OPTIONAL"的解釋在RFC-2119 [2]中。
這篇文章中用到的名域前綴 "SOAP-ENV" 和 "SOAP-ENC"分別與"http://schemas.xmlsoap.org/soap/envelope/" 和"http://schemas.xmlsoap.org/soap/encoding/"關聯。
整篇文檔中,名域前綴“xsi”被假定為與URI "http://www.w3.org/1999/XMLSchema-instance“(在XML Schema規范[11]定義)相連。類似的,名域前綴”xsd“被假定為與URI "http://www.w3.org/1999/XMLSchema"(在 [10]中定義)相連。名域前綴”tns“用來表示任意名域。所有其它的名域前綴都只是例子。
名域URI的基本形式”some-URI“表示某些依賴于應用程序或上下文的URI[4]。
這個規范用擴展BNF(在RFC-2616[5] 描述)描述某些結構。
1.3 SOAP消息舉例
在這個例子中,GetLastTradePrice SOAP 請求被發往 StockQuote服務。這個請求攜帶一個字符串參數和ticker符號,在SOAP應答中返回一個浮點數。XML名域用來區分SOAP標志符和應用程序特定的標志符。這個例子說明了在第6節中定義的HTTP綁定。如果SOAP中管理XML負載的規則完全獨立于HTTP是沒有意義的,因為事實上該負載是由HTTP攜帶的。
在Appendix A中有更多的例子。
例1 在HTTP請求中嵌入SOAP消息
POST /StockQuote HTTP/1.1
Host:
www.stockquoteserver.com
Content-Type: text/xml;
charset="utf-8"
Content-Length: nnnn
SOAPAction:
"Some-URI"
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
下面是一條應答消息,包括HTTP消息,SOAP消息是其具體內容:
例2 在HTTP應答中嵌入SOAP消息
HTTP/1.1 200 OK
Content-Type: text/xml;
charset="utf-8"
Content-Length:
nnnn
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Body>
<m:GetLastTradePriceResponse xmlns:m="Some-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
2. SOAP消息交換模型
SOAP消息從發送方到接收方是單向傳送,但正如上面顯示的,SOAP消息經常以請求/應答的方式實現。
SOAP實現可以通過開發特定網絡系統的特性來優化。例如,HTTP綁定(見第6節)使SOAP應答消息以HTTP應答的方式傳輸,并使用同一個連接返回請求。
不管SOAP被綁定到哪個協議,SOAP消息采用所謂的”消息路徑“發送,這使在終節點之外的中間節點可以處理消息。
一個接收SOAP消息的SOAP應用程序必須按順序執行以下的動作來處理消息:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -