2012-10-04 24 views
3

我需要通过SOAP Web服务在两端使用JAXWS,特别是两端的Apache CXF 2.6调用长时间运行的任务。JAXWS异步调用如何与轮询协同工作

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

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

是否在后台线程中向服务器发出SOAP请求,并保持相同的单个HTTP连接处于打开状态,Future#isDone()将检查该线程是否已收到响应?

如果是这样,是否没有代理服务器可能定义自己的超时的风险,并且如果服务器需要很长时间来响应会导致错误?

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

回答

3

是的,它会继续检查连接,直到收到响应。如果客户端和服务器之间发生连接丢失,响应将无法检索。

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

+0

谢谢,这就是我的想法,来自你,我会把它当做福音。 – Jesse