java - 用于调用 Web 服务的 JAX-WS 异步客户端技术

标签 java web-services soap jax-ws soa

我正在使用 JAX-WS 对基于 SOAP 的 Web 服务进行一些研究,我发现理解与客户端相关的部分非常复杂。 如果有人可以帮我解释一些主题,我将不胜感激。我正在使用 SOA 书籍和谷歌,但我真的很困惑,所以这就是为什么我认为在这里我可以获得更准确的答案,专注于我需要的东西。

因此我们可以通过同步和异步方式与网络服务进行通信。同步通信的不足是双方必须相互等待,直到处理结束。

异步客户端允许我们使用 2 种编程模型以异步方式进行通信:1- 回调和 2- 轮询

  • 疑问 1:有人可以用简单的方式向我解释这两种模型(回调和池化)的区别、优缺点

在谈论异步通信时,我还了解到生产者(Web 服务)应该有一种方法,在处理完成后找到消费者(客户端)。这就是我们进行寻址的原因。

  • 疑问 2:您能否简要解释一下寻址的工作原理?还有寻址与回调和轮询技术有何关系?

还有一件事。 Dispatch API 也让我很困惑。因为他们一直在谈论动态客户。

  • 疑问 3:如果他们一直在谈论动态客户端,Dispatch API 与异步通信有什么关系?
  • 疑点4:Dispatch API的2种使用方式(MESSAGE和PAYLOAD),是做什么用的,与JAXWS的异步通信模型有什么关系?

最佳答案

  1. 谁能用简单的方式向我解释这两种模型(回调和池化)的区别、优缺点

回调:实现并不直接。
- 优点:这种方法比轮询方法更优雅/系统。
- 缺点:客户端应该有一种机制,以便服务器可以使用回调对其进行回调。

轮询:实现很简单。
- 优点:由于它的技术简单,它是通用的,即使是启用了ajax的网页也可以使用这种技术来检查请求的更新是否可用。
- 缺点:带宽的巨大浪费,还有服务器客户端的时序问题,比如如果客户端的轮询请求还没有到来,服务器应该保留响应多长时间。

2.您能简单解释一下寻址是如何工作的吗?以及寻址与回调和轮询技术有何关系?

寻址使 web 服务可以理解以前仅在消息传递系统和传输提供商之间共享的信息。考虑这个用例,最初使用的传输将是 HTTP,用于发送请求和响应。然后您可能想要更改此传输的一部分,比如在发送回响应时,仅使用 SMTP 协议(protocol)。如果您使用 ws 寻址,与传输和寻址相关的全部信息将成为 soap 信封本身的一部分,这将使您的 web 服务能够动态更改传输以响应发送。

Web 服务寻址也可用于回调,从服务器到客户端。该服务在 WSDL 中将其所需的回调通知端口类型。客户端实现此端口类型,然后使用 WS 寻址通知服务回调端点。

简而言之,WS 寻址向 soap 信封添加了额外的标签,其中包括仅出现在传输 header 中的信息,如从地址、到地址、操作名称等。

3. 如果 Dispatch API 一直在谈论动态客户端,那么它们与异步通信有何关系?

Future<?> response = dispatch.invokeAsync(T, AsyncHandler);

invokeAsync 方法是一种轮询方法。响应立即返回给用户,并可能被轮询完成。同时,客户端程序可以做其他工作。javax.xml.ws.Response 实现了J2SE 5.0 中包含的java.util.concurrent.Future 接口(interface)。 Response 对象通过其 get 方法返回实际响应,如果响应尚未准备好返回,该方法将阻塞。

4.Dispatch API的两种使用方式(MESSAGE和PAYLOAD),分别是做什么用的,与JAXWS的异步通信模型有什么关系?
消息传递模式与异步通信没有直接关系。消息传递模式定义了 Web 服务请求中发送的信息量。 MESSAGE MODE 只能在使用 SOAP 绑定(bind)时使用。

关于java - 用于调用 Web 服务的 JAX-WS 异步客户端技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9962654/

相关文章:

java - SimpleDateFormat 解析不遵守时区

java - 将自定义 HTTP header 添加到 Axis 1.4 Web 服务响应

javascript - 如何在 Nodejs 中本地签署 Tronix 交易?

WAR 存档中的 Java 编辑文件

java - 从 MainActivity 到 Fragment 问题的非静态字符串变量

java - 简单的java web服务java

asp.net - Web 服务调用失败,出现 5xx 类型错误

python - 在客户端 __init__ (Python suds) 上设置 useragent

python - 如何添加wsu :Id attribute using zeep?

SoapUI 更改端点地址