程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> SOAP version 1.2 中文手冊5

SOAP version 1.2 中文手冊5

編輯:C#入門知識

6. 在HTTP中使用SOAP

本節描述了如何在使用或不使用HTTP Extension Framework的前提下將SOAP與HTTP的協同工作機制。將SOAP綁定在HTTP上可以利用HTTP豐富的特性集,提供使用SOAP形式方法和分布適應性的優點。將SOAP在HTTP上傳輸並不以為著SOAP可以完全超越HTTP的語義,更恰當的描述應當是SOAP的語義通過HTTP的映射而很自然地成為HTTP的語義。

SOAP很自然地利用HTTP的請求/響應消息模型,將SOAP請求的參數放在HTTP請求裡,而將SOAP響應的參數放在HTTP響應裡面。注意,無論如何,SOAP的中間介與HTTP中間介是不同的。也就是說,根據HTTP Connection頭字段來尋址的HTTP中間介一般並不能來處理HTTP請求中的SOAP實體體。

當需要將SOAP消息體包含在HTTP消息中時,HTTP應用程序必須依照RFC2376[3]使用媒體類型“text/xml”。

6.1 SOAP HTTP請求

雖然SOAP可以和多種HTTP請求方法聯合使用,但這裡的綁定只定義了SOAP是如何在HTTP Post請求中傳輸的。(可參閱section 7了解如何在RPC中使用SOAP,以及section 6.3如何使用HTTP Extension Framework)

6.1.1 HTTP Header中的SOAPAction字段

SOAPAction HTTP請求頭字段(header field)可以用於指示SOAP HTTP請求的目的。它的值是一個標識該目的的URI。SOAP對於格式上並沒有嚴格的限制,同時對URI的描述以及是否要是可解析的都沒有嚴格的限制。當發出SOAP HTTP請求時,HTTP客戶必須使用該頭字段。

soapaction  =  "SOAPAction" ":" [ <"> URI-reference <"> ] URI-reference  =  <as defined in RFC 2396 [4]>

SOAPAction頭字段的存在及其內容可以被服務器例如防火牆用於在HTTP中過濾SOAP請求消息。當該字段的值為空字符串( “”)時,則意味著SOAP消息的目的由HTTP Request-URI來提供。而如果沒有值則表示對消息的目的沒有指示。

例如:

Example 42
SOAPAction: "http://electrocommerce.org/abc#MyMessage"

SOAPAction: "myapp.sdl"

SOAPAction: ""

SOAPAction:
Examples of values for SOAPAction

6.2 SOAP HTTP響應

在HTTP之上的SOAP遵從用於在HTTP中表示通訊狀態的HTTP狀態代碼的語義。例如,2xx狀態代碼表明這是客戶端包含SOAP構件的請求被成功的接收、理解和接受等等。

當處理請求的時候發生SOAP錯誤的時候,SOAP HTTP服務器必須發出一個HTTP 500 “Internal Server Error”響應同時在包含於該響應的SOAP消息中應包含一個SOAP Fault元素(參閱 section 4.4)來指明SOAP處理的錯誤。

6.3 HTTP擴展框架

SOAP消息可以與HTTP Extension Framework[6]一起使用來標識SOAP HTTP請求的出現和意圖。

是使用Extension Framework還是使用簡單HTTP對於通訊各方而言是一個策略及能力的問題。客戶端可以通過一個強制擴展聲明以及一個“M-”HTTP方法名前綴來強制使用HTTP Extension Framwork。服務器端可以通過使用 510 “Not Extended” HTTP狀態代碼來強制使用HTTP Extension Framework。也就是說,通過一次額外的環游,每個通訊方都可以檢測到其他通訊方和因此的動作。

用於使用Extension Framework標識SOAP的擴展標識是:

http://www.w3.org/2001/06/soap-envelope

6.4 SOAP HTTP示例

Example 43
POST /StockQuote HTTP/1.1

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn

SOAPAction: "http://electrocommerce.org/abc#MyMessage"



<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope" >

 . . .

</env:Envelope>
SOAP HTTP Request Using POST

 

Example 44
HTTP/1.1 200 OK

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn



<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope" >

 . . .

</env:Envelope>
SOAP HTTP Response to Example 43

 

Example 45
M-POST /StockQuote HTTP/1.1

Man: "http://www.w3.org/2001/06/soap-envelope"; ns=NNNN

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn

NNNN-SOAPAction: "http://electrocommerce.org/abc#MyMessage"



<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope" >

 . . .

</env:Envelope>
SOAP HTTP Request using the experimental HTTP Extension Framework

 

Example 46
HTTP/1.1 200 OK

Ext:

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn



<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope" >

 . . .

</env:Envelope>
SOAP HTTP Response to Example 45

7. 在RPC中使用SOAP

SOAP的一個設計目標就是要利用XML的可擴展性和可伸縮性來包裝和交換RPC調用。本節定義了一個統一的遠程過程調用和響應的表示。

其實我們也可以預想到在RPC環境下的表示很可能是與在其他表示中定義的編碼風格結合。SOAP encodingStyle屬性(參閱 section 4.3.2)可以被用於指明在本節表示中使用的方法調用/響應的編碼風格。

在RPC中使用SOAP與SOAP協議綁定(參閱 section 6)基本是正交的。在使用HTTP作為SOAP協議綁定媒介的情況下,一個RPC調用可以很自然地映射到一個HTTP請求,而RPC響應則可以映射到HTTP響應。無論如何,使用SOAP方式的RPC並不限於HTTP協議綁定。

為實施一個方法調用,需要以下信息:

  • 目標SOAP結點的URI

  • 方法名

  • 可選的方法或過程的特征

  • 方法或過程的參數

  • 可選的頭數據

 SOAP依賴協議綁定來提供傳送URI的機制。例如,對HTTP而言,請求URI指明了與該調用相對應的資源。除要求該URI是合法的以外,SOAP對於該地址沒有任何限制(參閱[4]以獲得URI的更多信息)。

7.1 RPC和SOAP Body

RPC調用和響應都是在SOAP Body元素(參閱 section 4.3)中傳送,使用如下表示方式:

  • 一個方法調用被建模成一個結構struct。

  • 該方法調用顯示為一個簡單結構struct,包含每個[in]或[in/out]參數的存取標識。該結構的名和類型可使用過程或方法的名來標識。

  • 每個[in]或[in/out]參數都被表示為一個存取標識,該存取標識的名和類型都對應於相應參數的名和類型。他們的次序也是按照原來RPC中的次序。

  • 一個方法響應被建模成一個結構struct。

  • 該方法響應顯示為一個簡單結構struct,包含每個[out]或[in/out]參數的存取標識。而第一個存取標識是返回值,而隨後則是按照原來次序的返回參數。

  • 每個[out]或[in/out]參數都被表示為一個存取標識,該存取標識的名和類型都對應於相應參數的名和類型。返回值的存取標識名並沒有多少語義。同樣的,結構的名也並沒有多少語義。當然,無論如何,在添加了“Response”字串的方法名後,要有一個約定來命名它。

  • 方法調用出錯應使用SOAP Fault元素來編碼(餐飲 section 4.4)。如果一個綁定協議對於錯誤表達還有額外規則,那麼這些規則都應當被遵守。

就象先前表述的那樣,方法和響應的結構可以使用在section 5中定義的規則來編碼,也可以使用在encodingStyle屬性中描述的其他編碼(參閱 section 4.1.1)。

應用程序可以處理漏寫參數的請求不過也可以返回一個錯誤。

因為在響應中若包含“result”則表明成功,若包含“fault”則表明失敗,所以如果方法響應中同時包含了“result”和“fau

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved