Web Service 寻址概述

Web Service 寻址 (WS-Addressing) 是一项万维网联盟 (W3C) 规范,它通过定义用于对 Web Service 进行寻址的标准方法并在消息中提供寻址信息来帮助实现 Web Service 之间的互操作性。 WS-Addressing 规范引入了两个主要概念:端点引用和消息寻址属性。 有关进一步的详细信息,请参阅 WS-Addressing 规范。

端点引用

端点引用提供了一种用于包括有关特定端点的信息的标准机制。 可以将端点引用传播至其他伙伴,然后用来确定它们代表的 Web Service 端点的目标。 下表总结了端点引用的信息模型。
表 1. 端点引用的信息模型。 该表列出了各种抽象属性名称,并针对每个名称显示了其属性类型、多重性和简要描述。
抽象属性名(使用“W3C XML 信息集”的标记法则) 属性类型 多重性 描述
[address] xs:anyURI 1..1 指定端点地址的绝对 URI。
[reference parameters]* xs:any 0..unbounded 名称空间限定的元素信息项,要与端点交互,这些项是必需的。
[metadata] xs:any 0..unbounded 端点的行为、策略和功能的描述。
以下前缀和相应名称空间用于上表中。
前缀 名称空间
xs http://www.w3.org/2001/XMLSchema
以下 XML 段是端点引用的示例。 此元素引用了位于 URI http://example.com/fabrikam/acct 的端点,具有指定端点引用所引用的接口的元数据,并具有应用程序定义的引用参数 http://example.com/fabrikam 名称空间。
<wsa:EndpointReference xmlns:wsa="http://www.w3.org/2005/08/addressing"
                       xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
                       xmlns:fabrikam="http://example.com/fabrikam"
                       xmlns:wsdli="http://www.w3.org/2005/08/wsdl-instance"
                       wsdli:wsdlLocation="http://example.com/fabrikam
                       http://example.com/fabrikam/fabrikam.wsdl">
  <wsa:Address>http://example.com/fabrikam/acct</wsa:Address>
  <wsa:Metadata>
    <wsam:InterfaceName>fabrikam:Inventory</wsam:InterfaceName>
  </wsa:Metadata>
  <wsa:ReferenceParameters>
    <fabrikam:CustomerKey>123456789</fabrikam:CustomerKey>
    <fabrikam:ShoppingCart>ABCDEFG</fabrikam:ShoppingCart>
  </wsa:ReferenceParameters>
</wsa:EndpointReference>

消息寻址属性

消息寻址属性 (MAP) 是一组定义完好的 WS-Addressing 属性,它们可以表示为 SOAP 头中的元素,并且提供用于传递信息的标准方法(例如,应将对消息应答定向至的端点),或者提供有关一条消息与其他消息之间的关系的信息。 下表总结了由 WS-Addressing 规范定义的 MAP。
表 2. WS-Addressing 规范定义的消息寻址属性。 该表列出了抽象 WS-Addressing MAP 名称,并针对每个名称显示了其 MAP 内容类型、多重性和简要描述。
使用“W3C XML 信息集”的标记法则来抽取 WS-Addressing MAP 名称 MAP 内容类型 多重性 描述
[行动] xs:anyURI 1..1 专门标识消息语义的绝对 URI。 此属性对应于消息寻址至的端点引用的地址属性。 此值为必填项。
[destination] xs:anyURI 1..1 指定此消息的预期接收方地址的绝对 URI。 此值是可选的,因为当不存在值时,将缺省为规范中定义的匿名 URI,表示该地址由基础协议定义。
[reference parameters]* xs:any 0..unbounded 这对应于消息寻址至的端点引用的引用参数属性。 此值为可选值。
[source endpoint] EndpointReference 0..1 对作为消息起源的端点的引用。 此值为可选值。
[reply endpoint] EndpointReference 0..1 对于此消息应答的预期接收方的端点引用。 此值为可选值。
[fault endpoint] EndpointReference 0..1 对于此消息相关故障的预期接收方的端点引用。 此值为可选值。
[relationship]* xs:anyURI 加可选属性 type xs:anyURI 0..unbounded 用于表示此消息与另一消息之间关系的一对值。 此元素的内容传递相关消息的消息标识。 可选属性将传送关系类型。 此值为可选值。
[message id] xs:anyURI   专门标识消息的绝对 URI。 此值为可选值。
上述表中的抽象名称可用于指代本文档全篇中的 MAP。
以下是包含 WS-Addressing MAP 的 SOAP 消息示例:
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"
            xmlns:wsa="http://www.w3.org/2005/08/addressing"
            xmlns:fabrikam="http://example.com/fabrikam">
  <S:Header>
    ...
    <wsa:To>http://example.com/fabrikam/acct</wsa:To>
    <wsa:ReplyTo>
      <wsa:Address> http://example.com/fabrikam/acct</wsa:address>
    </wsa:ReplyTo>
    <wsa:Action>...</wsa:Action>
    <fabrikam:CustomerKey wsa:IsReferenceParameter='true'>123456789</fabrikam:CustomerKey>
    <fabrikam:ShoppingCart wsa:IsReferenceParameter='true'>ABCDEFG</fabrikam:ShoppingCart>
    ...
  </S:Header>
  <S:Body>
    ...
  </S:Body>
</S:Envelope>