如何处理长时间运行的Web服务操作?

时间:2010-07-31 15:37:22

标签: soa

我必须创建一个将大型文档转换为不同格式的Java EE应用程序。每次转换需要10秒到2分钟。 SOAP请求将来自我还必须创建的客户端应用程序。

处理这些长时间运行请求的最佳方法是什么?显然,该过程需要花费很多时间才能在没有任何反馈给用户的情况下运行。

我可以想到以下提供某种反馈的方法,但我不确定是否有更好的方法,也许是标准化的方法。

  1. 客户端从线程执行请求,服务器在响应中发送文档,这可能需要几分钟时间。在此之前,客户端显示“请稍候”消息,进度微调器等(这似乎很容易实现。
  2. 客户端发送“开始转换”命令。服务器返回某种作业ID ,客户​​端可以使用它来频繁轮询状态更新或最终文档。 (这似乎是用户友好的,因为我可以显示进度,但也要求服务器是有状态的。
  3. 客户端发送“开始转换”命令。服务器以某种方式通知客户端何时完成。 (这里我甚至不知道如何做到这一点
  4. 还有其他方法吗?在性能,稳定性,容错性,用户友好性等方面哪一个最好?

    感谢您的回答。

2 个答案:

答案 0 :(得分:5)

由于这几乎都是服务器端完成的,因此除了轮询服务器以及状态更新之外,客户端可以做的事情也不多。

#1没问题,但是用户真的很快就会感到不耐烦。对于大多数人来说,“几分钟”有点太长了。你需要HTTP Streaming来实现#3,但我认为这太过分了。

我会选择#2。

答案 1 :(得分:1)

对于3,服务器应该将唯一ID返回给客户端并使用该ID,客户端必须在稍后向服务器询问结果