我刚刚开始使用SOAP Web服务,偶然发现了WS-Addressing。
我已阅读Wikipedia page,但我很难理解WS-Addressing的重点是什么。
根据维基百科和网络上的各种来源,WS-Addressing允许将“寻址信息”或“路由信息”放入SOAP请求的标头中。
为什么这有用?如果我通过HTTP(或甚至通过SMTP或UDP)发送请求,那么我发送到的地址是将处理我的请求的服务器的地址,并且服务器可以简单地通过相同的通道进行回复。那么为什么需要寻址/路由信息?
我对一些真实世界(或多或少)WS-Addressing有用的例子特别感兴趣。
答案 0 :(得分:62)
我发现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。