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
桔子汁 阅读(404)
评论(0) 编辑 收藏 所属分类:
Web Service