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