【文章內容簡介】
些錯誤代碼提供一個人可以讀懂的錯誤解釋,它不是為程序處理而設,提供一些解釋該錯誤種類的信息。 ? 3. faultactor元素 指明 SOAP消息路徑中是誰引起了該錯誤的發(fā)生。faultactor屬性的值是一個標識該源的一個 URI。不作為 SOAP消息最終接收者的應用程序必須在 SOAP Fault元素中包含 faultactor元素。而消息的最終接收者可以使用 faultactor元素來明確地指明是它生成了該錯誤。 ? 4. detail元素 是用于傳輸與 SOAP Body元素相關的應用程序特定的錯誤信息。如果 Body元素中的內容不能被成功地處理的時候,它必須出現。它不能被用于傳輸屬于 Header條目的錯誤信息。 SOAP Fault 20232023 by Li Weigang. All rights reserved. ? 若 SOAP Fault元素中不出現 detail元素,則表明其中的錯誤與 Body元素的處理無關。這可以用于區(qū)分在錯誤情況下 Body元素是否被 SOAP的最終接受者處理過。 ? detail元素的所有直接子元素都被稱為 detail條目,同時每個 detail條目都作為 detail元素中的一個獨立的元素進行編碼。 ? detail條目的編碼規(guī)則如下: ? 1.一個 detail條目由一個完整修飾的元素名來標識。 detail元素的直接子元素可以是命名空間修飾的。 ? 2. SOAP encodingStyle屬性可以被用來表明 detail條目中使用的編碼規(guī)則。 SOAP Fault 20232023 by Li Weigang. All rights reserved. 第三節(jié) SOAP編碼 20232023 by Li Weigang. All rights reserved. ? 簡單類型 : SOAP采用了在“ XML Schema Part 2: Datatypes”的“ Buildin datatypes”節(jié)中定義的所有類型,包括值和詞匯空間 (lexical spaces) ? 字符串:“ string”數據類型在“ XML Schema Part 2: Datatypes”中被定義。 ? 枚舉:“ XML Schema Part 2: Datatypes”規(guī)范定義了一種稱為“玫舉 (enumeration)”的機制。 ? 字節(jié)數組:一個 Byte數組可以編碼為單引用或多引用值。對一個不透明的 Byte數組的推薦表示是使用在 XML Schema規(guī)范中定義的“ base64”編碼方式 。 ? 多態(tài)存取標識:多態(tài)地訪問多個類型的值,在運行時刻每個類型都是可使用的。一個多態(tài)存取標識實例必須包含一個“ xsi:type”屬性以描述類型的實際值。 SOAP 編碼 20232023 by Li Weigang. All rights reserved. ? 復合類型: SOAP依照在程序語言中常??匆姷囊韵陆Y構模式來定義復合類型 : ? “ struct”是一個復合類型值,其成員的存取標識名是相互區(qū)別的唯一標志,應彼此各不相同。 ? “ array”是一個復合類型值,其成員的順序位置是相互區(qū)別的唯一標志。 SOAP 編碼 20232023 by Li Weigang. All rights reserved. ?兩種描述數據類型實例的語法 ? Anonymous accessor: SOAPENC:int36/SOAPENC:int ? Anonymous because its name is its type rather than a meaningful id for the value ? Named accessor: value xsi:type=“ xsd:int” 36/value SOAP 數據類型 20232023 by Li Weigang. All rights reserved. int a[3] = {1, 2, 3}。 b = Add([in]a)。 m:Add xmlns:m=“ xmlns:SOAPENC= a SOAPENC:arrayType=“ xsd:int[3]” SOAPENC:int1/SOAPENC:int SOAPENC:int2/SOAPENC:int SOAPENC:int3/SOAPENC:int /a /m:Add SOAP 數據類型: Arrays 20232023 by Li Weigang. All rights reserved. 第四節(jié) SOAP消息交換 20232023 by Li Weigang. All rights reserved. ? By value : Add([in] int a, [in] int b)。 ? By reference : Square([in, out] int a)。 m:Add xmlns:m=“ a xsi:type=“ integer” 3/a b xsi:type=“ integer” 4/b /m:Add m:Square xmlns:m=“ a href=“ arg” / /m:Square a id=“ arg” xsi:type=“ integer” 8/a 傳值和傳引用 20232023 by Li Weigang. All rights reserved. ? SOAPRPC: SOAP的一個設計目標就是要利用XML的可擴展性和可伸縮性來包裝和交換 RPC調用。 ? 為實施一個方法調用,需要以下信息 : ? 目標 SOAP結點的 URI ? 方法名 ? 可選的方法或過程的特征 ? 方法或過程的參數 ? 可選的頭數據 ? SOAP依賴協議綁定來提供傳送 URI的機制 SOAP消息交換模式 20232023 by Li Weigang. All rights reserved. ? RPC調用和響應都是在 SOAP Body元素中傳送,使用如下表示方式 : ?一個方法調用被建模成一個結構 struct。該方法調用顯示為一個簡單結構 struct,包含每個 [in]或 [in/out]參數的存取標識。該結構的名和類型可使用過程或方法的名來標識。 ?每個 [in]或 [in/out]參數都被表示為一個存取標識,該存取標識的名和類型都對應于相應參數的名和類型。他們的次序也是按照原來 RPC中的次序。 ?一個方法響應被建模成一個結構 struct。 RPC和 SOAP Body 20232023 by Li Weigang. All rights reserved. SOAPENV:Envelope xmlns:SOAPENV= SOAPENV:encodingStyle= SOAPENV:Body m:QuotePrice xmlns:m=SomeURI modityComputer/modity /m:QuotePrice /SOAPENV:Body /SOAPENV:Envelope SOAP 請求消息 20232023 by Li Weigang. All rights reserved. ? 該方法響應顯示為一個簡單結構 struct,包含每個 [out]或 [in/out]參數的存取標識。而第一個存取標識是返回值,而隨后則是按照原來次序的返回參數。 ? 每個 [out]或 [in/out]參數都被表示為一個存取標識,該存取標識的名和類型都對應于相應參數的名和類型。返回值的存取標識名并沒有多少語義。同樣的,結構的名也并沒有多少語義。當然,無論如何,在添加了“ Response”字串的方法名后,要有一個約定來命名它。 ?