3

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

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

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

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

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

其他人如何通过 SOAP 调用长时间运行的任务?

4

1 回答 1

3

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

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

于 2012-10-04T11:31:13.843 回答