WS-BaseFault協議
WS-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 元素。這使我們可以將錯誤鏈接在一起。
創建新的故障
您可以照原來的樣子使用 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 以創建新命名的故障,并不添加任何附加的信息。只要知道返回了哪種類型的故障,就提供了所有必需的信息。
下面我們來看 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
posted on 2009-07-19 15:49
桔子汁 閱讀(424)
評論(0) 編輯 收藏 所屬分類:
Web Service