如何构建耗时的Web服务

时间:2010-10-15 07:21:28

标签: java web-services

一个简单而理论化的问题,答案可能是一个,但我想听一些意见和建议。我需要实现一个Web服务(在java中),它将启动一个耗时的过程,它将解析一些输入文件并执行dome db staff。

让用户知道整个过程不仅仅是开始,而是结束了解析,更新db ......的最佳方法是什么?因为我无法挂起用户等待整个过程完成。

注意:在开始此过程之前,用户已通过身份验证。

编辑:Web服务不仅可以通过Web浏览器访问,而且客户端可以使用任何使用他们想要的语言构建的客户端访问它,只要它们引用wsdl。

感谢

2 个答案:

答案 0 :(得分:6)

对于您的方案,您应该实现异步Web服务。使用异步Web服务,您有两种选择。

  1. (正如有人提到的那样)您可以轮询服务以查看流程是否已完成
  2. 您可以要求服务器回拨
  3. 第一种方法易于实现,并且可以与许多WS库一起使用。但是,这会带来一个缺点,即服务器不得不为客户端的轮询请求浪费带宽。毕竟,这是民意调查。在大多数情况下,投票是一个坏主意。

    后者不会像前者那样直截了当。而你我不知道每个JAX-WS库是否都支持它。为了支持你,我做了一个快速的谷歌搜索,找到了这个链接。

    http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation-on-the-Client-Side.htm

    这可能对你有所帮助。

答案 1 :(得分:4)

我会在用户提交数据时给用户一个令牌,并让他们使用他们的令牌(异步)轮询到另一个方法。

然后,在第一种方法中,我将数据添加到队列中,并在服务器上运行另一个进程,检查该队列并执行处理。然后更新数据库中的令牌以通知用户他们的工作已完成。

之前我曾经做过类似的事情,发现在基于HTTP / web的系统上启动一个长时间运行的进程是一个坏主意,因为底层系统通常可以超时调用webservice这是长期的。