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