?? soap規(guī)范(1).txt
字號(hào):
作者:bdsc
email: bdscca@yahoo.ca
日期:2001-7-13 17:02:54
SOAP:簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議
(2001-1-1)
摘要
SOAP是用在分散或分布的環(huán)境中交換信息的簡(jiǎn)單的協(xié)議,它是一個(gè)基于XML的協(xié)議,包括三個(gè)部分:封裝定義了一個(gè)描述消息中包含什么內(nèi)容以及如何處理它們的框架,編碼規(guī)則用于表示應(yīng)用程序定義的數(shù)據(jù)類(lèi)型的實(shí)例,另外還有一個(gè)表示遠(yuǎn)程過(guò)程調(diào)用和應(yīng)答的協(xié)定。SOAP被設(shè)計(jì)為可以與各種其它協(xié)議結(jié)合使用;但這篇文章僅描述如何將SOAP和HTTP及HTTP擴(kuò)展框架相結(jié)合。
目錄
1. 簡(jiǎn)介
1.1 設(shè)計(jì)目標(biāo)
1.2 符號(hào)協(xié)定
1.3 SOAP消息舉例
2. SOAP消息交換模型
3. 與XML的關(guān)系
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頭和體的關(guān)系
4.4 SOAP 錯(cuò)誤
4.4.1 SOAP錯(cuò)誤代碼
5. SOAP編碼
5.1 XML編碼類(lèi)型規(guī)則
5.2 簡(jiǎn)單類(lèi)型
5.2.1 字符串
5.2.2 枚舉
5.2.3 字符數(shù)組
5.3 多態(tài) Accessor
5.4 復(fù)合類(lèi)型
5.4.1 復(fù)合值和對(duì)值的引用
5.4.2 數(shù)組
5.4.2.1 PartiallyTransmitted Arrays
5.4.2.2 稀疏數(shù)組
5.4.3 一般復(fù)合類(lèi)型
5.5 缺省值
5.6 SOAP root屬性
6. 在HTTP中使用SOAP
6.1 SOAP HTTP請(qǐng)求
6.1.1 HTTP頭中的SOAPAction域
6.2 SOAP HTTP應(yīng)答
6.3 HTTP擴(kuò)展框架
6.4 SOAP HTTP舉例
7. 用SOAP表示RPC
7.1 RPC和SOAP體
7.2 RPC和SOAP頭
8. 安全考慮
9. 參考文獻(xiàn)
A. SOAP封裝舉例
A.1 請(qǐng)求編碼舉例
A.2 應(yīng)答編碼舉例
1. 簡(jiǎn)介
SOAP以XML形式提供了一個(gè)簡(jiǎn)單、輕量的用于在分散或分布環(huán)境中交換結(jié)構(gòu)化和類(lèi)型化信息的機(jī)制。SOAP本身并沒(méi)有定義任何應(yīng)用程序語(yǔ)義,如編程模型或特定語(yǔ)義的實(shí)現(xiàn);實(shí)際上它通過(guò)提供一個(gè)有標(biāo)準(zhǔn)組件的包模型和在模塊中編碼數(shù)據(jù)的機(jī)制,定義了一個(gè)簡(jiǎn)單的表示應(yīng)用程序語(yǔ)義的機(jī)制。這使SOAP能夠被用于從消息傳遞到RPC的各種系統(tǒng)。
SOAP包括三個(gè)部分
SOAP封裝(見(jiàn)第4節(jié))結(jié)構(gòu)定義了一個(gè)整體框架用來(lái)表示消息中包含什么內(nèi)容,誰(shuí)來(lái)處理這些內(nèi)容以及這些內(nèi)容是可選的或是必需的。
SOAP編碼規(guī)則(見(jiàn)第5節(jié))定義了用以交換應(yīng)用程序定義的數(shù)據(jù)類(lèi)型的實(shí)例的一系列機(jī)制。
SOAP RPC表示(見(jiàn)第7節(jié))定義了一個(gè)用來(lái)表示遠(yuǎn)程過(guò)程調(diào)用和應(yīng)答的協(xié)定。
雖然這三個(gè)部分都作為SOAP的一部分一起描述,但它們?cè)诠δ苌鲜窍嘟坏摹L貏e的,封裝和編碼規(guī)則是在不同的名域中定義的,這種模塊性的定義方法增加了簡(jiǎn)單性。
在SOAP封裝,SOAP編碼規(guī)則和SOAP RPC協(xié)定之外,這個(gè)規(guī)范還定義了兩個(gè)協(xié)議的綁定,描述了在有或沒(méi)有HTTP擴(kuò)展框架[6]的情況下,SOAP消息如何包含在HTTP消息[5]中被傳送。
1.1 設(shè)計(jì)目標(biāo)
SOAP的主要設(shè)計(jì)目標(biāo)是簡(jiǎn)單性和可擴(kuò)展性,這意味著傳統(tǒng)的消息系統(tǒng)和分布對(duì)象系統(tǒng)的某些性質(zhì)不是SOAP規(guī)范的一部分。這些性質(zhì)包括:
分布式碎片收集
成批傳送消息
對(duì)象引用(要求分布式碎片收集)
激活機(jī)制(要求對(duì)象引用)
1.2 符號(hào)約定
這篇文章中的關(guān)鍵字 "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/"關(guān)聯(lián)。
整篇文檔中,名域前綴“xsi”被假定為與URI "http://www.w3.org/1999/XMLSchema-instance“(在XML Schema規(guī)范[11]定義)相連。類(lèi)似的,名域前綴”xsd“被假定為與URI "http://www.w3.org/1999/XMLSchema"(在 [10]中定義)相連。名域前綴”tns“用來(lái)表示任意名域。所有其它的名域前綴都只是例子。
名域URI的基本形式”some-URI“表示某些依賴(lài)于應(yīng)用程序或上下文的URI[4]。
這個(gè)規(guī)范用擴(kuò)展BNF(在RFC-2616[5] 描述)描述某些結(jié)構(gòu)。
1.3 SOAP消息舉例
在這個(gè)例子中,GetLastTradePrice SOAP 請(qǐng)求被發(fā)往 StockQuote服務(wù)。這個(gè)請(qǐng)求攜帶一個(gè)字符串參數(shù)和ticker符號(hào),在SOAP應(yīng)答中返回一個(gè)浮點(diǎn)數(shù)。XML名域用來(lái)區(qū)分SOAP標(biāo)志符和應(yīng)用程序特定的標(biāo)志符。這個(gè)例子說(shuō)明了在第6節(jié)中定義的HTTP綁定。如果SOAP中管理XML負(fù)載的規(guī)則完全獨(dú)立于HTTP是沒(méi)有意義的,因?yàn)槭聦?shí)上該負(fù)載是由HTTP攜帶的。
在Appendix A中有更多的例子。
例1 在HTTP請(qǐng)求中嵌入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>
下面是一條應(yīng)答消息,包括HTTP消息,SOAP消息是其具體內(nèi)容:
例2 在HTTP應(yīng)答中嵌入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消息從發(fā)送方到接收方是單向傳送,但正如上面顯示的,SOAP消息經(jīng)常以請(qǐng)求/應(yīng)答的方式實(shí)現(xiàn)。
SOAP實(shí)現(xiàn)可以通過(guò)開(kāi)發(fā)特定網(wǎng)絡(luò)系統(tǒng)的特性來(lái)優(yōu)化。例如,HTTP綁定(見(jiàn)第6節(jié))使SOAP應(yīng)答消息以HTTP應(yīng)答的方式傳輸,并使用同一個(gè)連接返回請(qǐng)求。
不管SOAP被綁定到哪個(gè)協(xié)議,SOAP消息采用所謂的”消息路徑“發(fā)送,這使在終節(jié)點(diǎn)之外的中間節(jié)點(diǎn)可以處理消息。
一個(gè)接收SOAP消息的SOAP應(yīng)用程序必須按順序執(zhí)行以下的動(dòng)作來(lái)處理消息:
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -