我发现 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。