JAXWS异步调用如何与轮询一起使用

时间:2012-10-04 08:08:47

标签: web-services soap asynchronous jax-ws cxf

我需要通过SOAP Web服务调用长时间运行的任务,两端都使用JAXWS,特别是两端的Apache CXF 2.6。

我看到我可以在CXF代码生成器中启用异步方法,这会为每个操作创建两个异步方法。由于NAT问题,我无法使用WS-Addressing和回调。所以我可能想要使用其他轮询方法。

我需要确保使用此机制不会有套接字读取超时,所以我想了解它是如何工作的。

是否在后台线程中向服务器发出SOAP请求,该后台线程保持相同的单个HTTP连接打开,Future#isDone()检查该线程是否收到响应?< / p>

如果是这样,中间的代理服务器是否存在定义其自身超时的风险,如果服务器需要很长时间才能响应会导致错误?

其他人通过SOAP调用长时间运行的任务会做些什么?

1 个答案:

答案 0 :(得分:3)

是的,它会一直检查连接,直到收到回复。如果客户端和服务器之间发生了某些事情并且连接丢失,则无法检索响应。

对于长时间运行的事情,更好的方法是将长时间运行分成两种方法。一个可以接受输入并在后台线程上启动工作并返回某种唯一标识符的工具。第二种方法将采用该标识符并返回结果。客户端可以调用该方法来轮询服务器。这可能是长时间运行,并阻止或使用异步方法或类似方法。如果那个请求超时,它可以再次调用它。