WS-Addressing 有啥用?

Posted

技术标签:

【中文标题】WS-Addressing 有啥用?【英文标题】:What is WS-Addressing good for?WS-Addressing 有什么用? 【发布时间】:2011-12-14 01:53:06 【问题描述】:

我刚开始使用 SOAP Web 服务,偶然发现了 WS-Addressing。

我已阅读 Wikipedia page,但我很难理解 WS-Addressing 的意义。

根据 Wikipedia 和网络上的各种来源,WS-Addressing 允许将“寻址信息”或“路由信息”放入 SOAP 请求的标头中。

为什么这很有用?如果我通过 HTTP(甚至通过 SMTP 或 UDP)发送请求,那么我发送到的地址就是将处理我的请求的服务器的地址,服务器可以简单地通过同一通道进行回复。那么为什么需要寻址/路由信息呢?

我会对 WS-Addressing 有用的一些现实世界(或多或少)示例特别感兴趣。

【问题讨论】:

【参考方案1】:

我发现 WS-Addressing 在不能立即提供 SOAP 响应的情况下特别有用。要么无法立即获得用于形成响应的资源,要么生成结果本身需要很长时间。

例如,当您的业务流程涉及“人情味”(WS-HumanTask 所针对的流程)时,就会发生这种情况。您可以将 Web 服务放在业务前面,但有时业务需要时间。它可能是必须手动验证的订阅,需要批准的东西,无论如何,但需要几天时间才能完成。你会一直保持连接打开吗?除了等待响应之外,你会什么都不做吗?不!那是低效的。

您需要的是通知流程。客户端发出请求但不等待响应。相反,它通过使用“回复”地址来指示服务器将响应发送到何处。一旦响应可用,服务器就会连接到该地址并发送响应。

瞧……Web 服务之间的异步交互,将通信过程的生命周期与 HTTP 连接的生命周期解耦。很有用...

但是等等... HTTP 连接?我为什么要关心这个?如果我希望通过另一种类型的协议发回响应怎么办? (SOAP 友好地提供它,因为它不依赖于任何协议)。

对于正常的请求/响应流程,响应与请求来自同一通道,因为它是您知道的连接......所以例如,您有一个 HTTP 连接......这意味着 HTTP 输入和 HTTP 输出。

但是使用 WS-Addressing,您就不会被束缚。 您可以要求在其他类型的频道上回复。例如,请求来自 HTTP,但您可以指示服务器通过 SMTP 发回响应。

通过这种方式 WS-Addressing 定义了标准方式 通过多个传输路由消息。正如wiki page 所说:

而不是依靠网络级传输来传递路由信息, 使用 WS-Addressing 的消息可能在标准化的 SOAP 标头中包含其自己的调度元数据。

至于你的观察:

服务器可以简单的通过同一个频道回复

...对某些人有用的东西,可能对其他人不起作用,而对于其他人,我们有 WS-Addressing :D。

【讨论】:

以上是关于WS-Addressing 有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring-WS 路由 WS-Addressing 响应

asp net core soap请求ws-addressing

gsoap - SOAP Header 中的 WS-Addressing 元素

WCF - 如何在服务响应中包含/添加 WS-Addressing“TO”标头

svcutil 支持 WS-Addressing 和 WS-Policy

自定义 WCF 绑定等效于 WSHttpBinding 且 WS-Addressing 已关闭