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