隨筆-128  評論-55  文章-5  trackbacks-0
              WS-BaseFault協議

          WS-BaseFault協議描述了一個標準的錯誤報告機制,定義了一個返回錯誤信息的基本錯誤類型。并且提供了一種方法,為更多的特定目的擴展該基本格式,而不改變最初的結構。錯誤消息格式的一致性,使得各種錯誤更加容易被理解和處理。

          1.1.1.1    BaseFault

          中心概念是 BaseFault 的概念。BaseFault 類似于下面這樣:

          <BaseFault>

                <Timestamp>2005-2-15T03:24:57</Timestamp>

                <OriginatorReference>

                    <wsa:EndpointReference xmlns:wsa="http://www.w3.org/2005/02/addressing"

                                         xmlns:sat="http://example.org/satelliteSystem">

                       <wsa:Address>http://example.com/satellite</wsa:Address>

                       <wsa:ReferenceProperties>

                           <sat:SatelliteId>SAT9928</sat:SatelliteId>

                       </wsa:ReferenceProperties>

                   </wsa:EndpointReference>

                </OriginatorReference>

                <ErrorCode dialect="http://www.example.com/NeutronErrorMessages">

                    PolarityUnchangedError

                </ErrorCode>

                <Description>Unable to reverse the polarity of the neutron flow! </Description>

          </BaseFault>

          所有這些值都是可選的,只有 Timestamp 除外,它指出故障是何時實際發生的。OriginatorReference 是對產生故障的 Web 服務的端點引用,而 ErrorCode Description 描述實際的問題。dialect 屬性是一個 URL,使我們可以指定如何解釋 ErrorCode。提及的協議映射錯誤代碼到(比如) POSIX errno 消息。

          我們也可以添加包含其他 BaseFault FaultCause 元素。這使我們可以將錯誤鏈接在一起。

          1.1.1.2    擴展BaseFault

          創建新的故障

          您可以照原來的樣子使用 BaseFault,讓客戶機應用程序解析信息并確定問題,但是更通常的情況是擴展 BaseFault 以創建更多特定的故障。我們做到這一點的方式是,使用 XML 模式來創建新的類型。例如,我們可以像下面這樣創建新的 SatelliteNotRespondingFault

          <xsd:complexType  name="SatelliteNotRespondingFaultType">

            <xsd:complexContent>

              <xsd:extension base="wsbf:BaseFaultType">

                 <xsd:sequence>

                    <xsd:element name="LastReboot" type="xsd:dateTime" />

                 </xsd:sequence>

              </xsd:extension>

            </xsd:complexContent>

          </xsd:complexType>

          <xsd:element name="SatelliteNotRespondingFault" type="wsrl:SatelliteNotRespondingFaultType"/>

          這允許我們返回一個故障,比如:

           

          <SatelliteNotRespondingFault>

              <Timestamp>2005-2-15T03:24:57</Timestamp>

              <Description>Cannot connect to satellite</Description>

              <LastReboot>2005-2-10T09:43:02</LastReboot>

          </SatelliteNotRespondingFault>

          在本例中,我們以LastReboot元素的形式提供了額外的信息,但這是一個SatelliteNotRespondingFault,幾乎給客戶機提供了所有信息。實際上,WSRF 協議定義的大多數故障只是擴展 BaseFault 以創建新命名的故障,并不添加任何附加的信息。只要知道返回了哪種類型的故障,就提供了所有必需的信息。

          1.1.1.3    WSRF中定義的錯誤

          下面我們來看 WSRF 協議定義的不同類型的故障。

          WSRF 故障:WS-ResourceProperties

          WS-ResourceProperties 協議定義了以下故障,以作為適當事件的響應發送:

          l        ResourceUnknownFault:該故障適用于所有各種操作,并指出 Web 服務不認識指向端點引用的消息。

          l        InvalidResourcePropertyQName:當請求一個或多個屬性時,該故障指出客戶機試圖獲得或設置所操作的 WS-Resource 上不存在的 ResourceProperty。

          l        InvalidSetResourcePropertiesRequestContent:在這種情況下,SetResourcePropertyRequest 中發送的數據不符合適當資源屬性文檔的模式。

          l        UnableToModifyResourceProperty:在這種情況下,客戶機試圖設置的資源屬性是只讀的。

          l        SetResourcePropertyReqestFailed:這是一個一般錯誤,指出服務器不能添加或更改資源屬性。

          l        UnknownQueryExpressionDialect:當查詢資源屬性時,該故障指出客戶機試圖以服務不認識的方言(dialect)評估查詢。因此,定義了 XPath V1.0 V2.0。

          l        InvalidQueryExpression:在這種情況下,查詢不符合指定的方言。

          l        QueryEvaluationError:這是一個一般錯誤,指出在處理查詢時出現了錯誤。

           

          WSRF 故障:WS-ResourceLifetime

          WS-ResourceLifetime 協議定義了四種與 WS-Resource 的即時銷毀或預定銷毀有關的故障:

          l        ResourceUnknownFault:與 WS-ResourceProperties 中一樣,該故障指出客戶機試圖訪問不存在的或者 Web 服務不知道的 WS-Resource。

          l        ResourceNotDestroyedFault:該故障指出,WS-Resource 沒有被銷毀。實際的錯誤消息可能會給出更多的解釋信息。

          l        UnableToSetTerminationTimeFault:這是一個一般故障,指出服務不能做出請求的更改。

          l        TerminationTimeChangeRejectedFault:在這種情況下,客戶機試圖做出不符合 WS-Resource 的內部規則的更改。

           

          WSRF 故障:WS-ServiceGroup

          WS-ServiceGroup 協議定義了三種故障:

          l        UnsupportedMemberInterfaceFault:該故障指出,客戶機試圖添加的服務不實現任何所需的 portType。

          l        ContentCreationFailedFault:在這種情況下,添加 Web 服務的請求不具有適當的 Content 元素,如 ServiceGroup MembershipContentRule 中所定義的。

          l        AddRefusedFault:這是一個一般故障,指出資源不能被添加。

           



          Author: orangelizq
          email: orangelizq@163.com

          歡迎大家訪問我的個人網站 萌萌的IT人
          posted on 2009-07-19 15:49 桔子汁 閱讀(431) 評論(0)  編輯  收藏 所屬分類: Web Service
          主站蜘蛛池模板: 郴州市| 丰宁| 淮滨县| 彝良县| 德安县| 镇赉县| 南充市| 永嘉县| 皋兰县| 岢岚县| 漳州市| 宜宾市| 沙坪坝区| 若羌县| 台安县| 荔浦县| 精河县| 宝兴县| 兖州市| 九龙坡区| 柳江县| 江山市| 利辛县| 文成县| 江孜县| 钟祥市| 自贡市| 樟树市| 新竹县| 福泉市| 德清县| 绵阳市| 蓬莱市| 特克斯县| 柘城县| 越西县| 高清| 东山县| 桑植县| 皋兰县| 清水县|