SOAP HTTP和RPC SOAP的案例分析
對(duì)于SOAP協(xié)議的內(nèi)容,這次我們主要針對(duì)兩方面講解,一是SOAP HTTP的應(yīng)用舉例,另一方面是對(duì)RPC SOAP的相關(guān)內(nèi)容的解析。下面我們就先來看看具體的SOAP HTTP舉例。
使用POST的SOAP HTTP
- POST /StockQuote HTTP/1.1
- Content-Type: text/xml; charset="utf-8"
- Content-Length: nnnn
- SOAPAction: "http://electrocommerce.org/abc#MyMessage"
- <SOAP-ENV:Envelope...
- HTTP/1.1 200 OK
- Content-Type: text/xml; charset="utf-8"
- Content-Length: nnnn
- <SOAP-ENV:Envelope...
使用擴(kuò)展框架的SOAP HTTP
- M-POST /StockQuote HTTP/1.1
- Man: "http://schemas.xmlsoap.org/soap/envelope/"; ns=NNNN
- Content-Type: text/xml; charset="utf-8"
- Content-Length: nnnn
- NNNN-SOAPAction: "http://electrocommerce.org/abc#MyMessage"
- <SOAP-ENV:Envelope...
- HTTP/1.1 200 OK
- Ext:
- Content-Type: text/xml; charset="utf-8"
- Content-Length: nnnn
- <SOAP-ENV:Envelope...
以上就是SOAP HTTP的應(yīng)用案例,我們就介紹到這里,下面我們來看看在RPC中使用SOAP的相關(guān)內(nèi)容.
設(shè)計(jì)SOAP的目的之一就是利用XML的擴(kuò)展性和靈活性來封裝和交換RPC調(diào)用.這一節(jié)定義了遠(yuǎn)程過程調(diào)用和應(yīng)答的統(tǒng)一表示形式.雖然可以預(yù)計(jì)到這種表示形式最可能被用于與之前定義的編碼方式相結(jié)合,但也可能有其它的表示形式.SOAP的encodingstyle屬性可以用來表明方法調(diào)用和應(yīng)答都使用這一節(jié)所指定的表示方式.在RPC中使用SOAP和SOAP協(xié)議綁定是緊密相關(guān)的.在使用HTTP作為綁定協(xié)議時(shí),一個(gè)RPC調(diào)用自然地映射到一個(gè)HTTP請(qǐng)求,RPC應(yīng)答同樣映射到HTTP應(yīng)答.但是,在RPC中使用SOAP并不限于綁定HTTP協(xié)議.
要進(jìn)行方法調(diào)用,以下的信息是必需的:
目標(biāo)對(duì)象的URI
方法名
方法signature(可選)
方法的參數(shù)
頭數(shù)據(jù)(可選)
SOAP依靠協(xié)議綁定提供傳送URI的機(jī)制.例如,對(duì)HTTP來說,請(qǐng)求的URI指出了調(diào)用的來源 .除了必須是一個(gè)合法的URI之外,SOAP對(duì)一個(gè)地址的格式?jīng)]有任何限制.
RPC和SOAP體
RPC方法調(diào)用和應(yīng)答都包含在SOAP Body元素中,它們使用如下的表示形式:
一個(gè)方法調(diào)用用一個(gè)結(jié)構(gòu)表示
一個(gè)方法調(diào)用被看作一個(gè)單個(gè)的結(jié)構(gòu),每個(gè)[in]和[in/out]參數(shù)有一個(gè)accessor.結(jié)構(gòu)的名和類型與方法相同.每個(gè)[in]和[in/out]參數(shù)都被看作一個(gè)accessor,這個(gè)accessor的名和類型與參數(shù)的名和類型相對(duì)應(yīng).它們的出現(xiàn)順序和方法中定義的參數(shù)順序相同.
一個(gè)方法應(yīng)答用一個(gè)結(jié)構(gòu)表示.
一個(gè)方法應(yīng)答被看作一個(gè)單個(gè)的結(jié)構(gòu),返回值和每個(gè)[in]和[in/out]參數(shù)有一個(gè)accessor.***個(gè)accessor是返回值,之后是參數(shù)accessor,參數(shù)accessor的出現(xiàn)順序和方法中定義的參數(shù)順序相同.每個(gè)參數(shù)accessor的名稱和類型與參數(shù)的名稱和類型相對(duì)應(yīng).返回值accessor的名稱并不重要.同樣,結(jié)構(gòu)的名稱也不重要,不過,通常在方法名稱的后面加上字符串"Response"作為結(jié)構(gòu)的名稱.
方法錯(cuò)誤使用SOAP Fault元素表示.如果綁定的協(xié)議有額外的規(guī)則表示錯(cuò)誤,則這些規(guī)則也必須要遵從.正如上面所述,方法調(diào)用和應(yīng)答結(jié)構(gòu)可以按照第5節(jié)中規(guī)則編碼,或者用encodingstyle屬性指定編碼方式.應(yīng)用程序可以處理缺少參數(shù)的請(qǐng)求,但是可能返回一個(gè)錯(cuò)誤.因?yàn)榉祷亟Y(jié)果表示調(diào)用成功,錯(cuò)誤表示調(diào)用失敗,所以,在方法應(yīng)答中同時(shí)包含返回結(jié)果和錯(cuò)誤是錯(cuò)誤的.
RPC和SOAP頭
在RPC編碼中,可能會(huì)有與方法請(qǐng)求有關(guān)但不是正規(guī)的方法signature的附加信息.如果這樣,它必須作為SOAP頭元素的子元素.使用這種頭元素的一個(gè)例子是在消息中傳遞事務(wù)ID.由于事務(wù)ID不是方法signature的一部分,通常由底層的組件而不是應(yīng)用程序代碼控制,所以沒有一種直接的方法在調(diào)用中傳遞這個(gè)必要的信息.通過在頭中添加一個(gè)給定名字的條目,接收方的事務(wù)管理器就可以析取這個(gè)事務(wù)ID,而且不影響遠(yuǎn)程過程調(diào)用的代碼.
到這里我們就將SOAP HTTP和RPC中使用SOAP的相關(guān)內(nèi)容介紹完了,希望對(duì)大家有所幫助。