SOAP协议初级指南(9)
?
| 錯誤處理 一個服務器有時將不能正確地為一個方法請求提供服務。這可能是由于一般的HTTP錯誤造成的(如請求-URI不能被映射到本地的資源或一個HTTP級的安全違反)。也可能是在SOAP翻譯軟件中的問題,如馬歇爾打包錯誤或一個必須的頭不能被認出。其它可能的原因包括一個請求不能正確地被服務,或者應用/對象代碼決定要返回一個應用級的錯誤給調用者。這些情況在SOAP規范中都被清楚地加以處理。 如果在分發對任何SOAP代碼的調用之前一個錯誤發生在HTTP層,一個純HTTP響應必須被返回。標準的HTTP狀態代碼編號將被采用,400級的代碼表示一個客戶引發的錯誤,500級的代碼表示服務器引發的錯誤。這通常在代碼執行前由Web服務器軟件自動處理。 假設在HTTP層一切正常,錯誤發生的下一個地方是在那些翻譯和分發對應用代碼(如COM對象和CORBA伺服對象)的SOAP調用。如果錯誤發生在這一層,服務器必須返回一個錯誤消息來代替一個標準的響應消息。一個錯誤消息是下列被編碼為soap:Body的根元素的類型的實例。 <schema targetNamespace=‘urn:schemas-xmlsoap-org:soap.v1‘ > <element name=‘Fault‘> <type> <element name=‘faultcode‘ type=‘string‘ /> <element name=‘faultstring‘ type=‘string‘ /> <element name=‘runcode‘ type=‘string‘ /> <element name=‘detail‘ /> </type> </element>
</schema>
faultcode存取元素必須包含一個用已知的整數表示的SOAP錯誤代碼或者一個專門應用的名域限制的值。當前的SOAP 錯誤代碼如圖12所示。Faultstring存取元素包含對發生的錯誤的可讀性的描述。runcode 存取元素包含一個字符串,它的值必須是Yes, No或 Maybe,表明被請求的操作實際上是否在錯誤產生之前被執行。Detail存取元素是可選的,用于包含一個專門應用的異常對象。 下面是一個對應于一個包含無法識別的必須的頭元素的請求的SOAP錯誤的例子: <soap:Envelope xmlns:soap=‘urn:schemas-xmlsoap-org:soap.v1‘ > <soap:Body> <soap:Fault> ; <faultcode>200</faultcode> <faultstring> Unrecognized ‘causality‘ header </faultstring> <runcode>No</runcode> </soap:Fault> </soap:Body> </soap:Envelope> 假設具體應用的錯誤需要被返回,你可能看到如圖13所示的代碼。在應用定義的錯誤的情況下,考慮應用的異常/錯誤對象時detail存取元素起到了soap:Body 元素的作用。 奧秘 一個遺留的HTTP問題還需要進一步闡明。SOAP支持(但不需要)HTTP擴展框架約定來指定必須的HTTP頭擴展。這些約定主要有兩個目的。首先,它們允許任意的URI被用于限定給定的HTTP頭的范圍(象XML名域一樣)。第二,這些約定允許把必須的頭與可選的頭區分開來(象soap:mustUnderstand)。下面是一個使用HTTP擴展框架來把SOAPMethodName頭定義成為一個必須的頭擴展: M-POST /foobar HTTP/1.1 Host: 209.110.197.2 Man: "urn:schemas-xmlsoap-org:soap.v1; ns=42" 42-SOAPMethodName: urn:bobnsid:IFoo#DoIt Man頭映射SOAP URI到前綴為42的頭,并表示沒有認出SOAP的服務器必須返回一個HTTP錯誤,狀態代碼為501 (沒有被實現) 或 510 (沒有被擴展)。HTTP方法必須是M-POST,表明目前是必須的頭擴展。 結論 SOAP是一個被類型化的序列化格式,它恰巧用HTTP 作為請求/響應消息傳輸協議。SOAP被設計為與正將出現的XML Schema規范密切配合,并支持在Internet的任何地方運行的COM, CORBA, Perl, Tcl, 和 Java-language, C, Python, 或 PHP 等程序間的互操作性。 希望本文給了你一個對這個協議具體細節的更清晰的理解。我鼓勵你用SOAP進行實驗,或者試著使用SOAP使能的系統之一(列在http://www.develop.com/soap/),或者自己做一些工作。我本人發現采用腳本語言(Jscript),使一個基本的SOAP客戶與服務器建立并運行只花費了不到一個小時。針對你對HTTP和XML的熟悉程度,以及你的目標平臺的成熟度,你所花費的時間會有所不同。 |
轉載于:https://www.cnblogs.com/alaricblog/p/3278252.html
總結
以上是生活随笔為你收集整理的SOAP协议初级指南(9)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT消息,事件,槽的典型用法
- 下一篇: 两岸三地在线编程学习网站大全