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

只有注册用户登录后才能发表评论。


网站导航: