29

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

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

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

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

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

4

1 回答 1

68

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

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

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

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

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

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

但是使用 WS-Addressing,您不会被束缚。您可以要求在另一种类型的渠道上作出响应。例如,请求来自 HTTP,但您可以指示服务器通过 SMTP 发回响应。

通过这种方式,WS-Addressing 定义了通过多个传输路由消息的标准方法。正如维基页面所说:

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

至于你的观察:

并且服务器可以简单地通过同一频道回复

... 对某些人有用,可能对其他人无效,而对于其他人,我们有 WS-Addressing :D。

于 2011-10-24T20:51:33.530 回答