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>