2011-06-28 90 views
0

我有一个我开发的类库,它是相当处理密集型的,我目前通过WCF REST服务调用。WCF休息异步调用方法

REST服务直接访问的类库和或多或少的WCF其余服务是系统的接口的DLL。

比方说,下面的方法定义:

创建请求

启动一个线程需要5分钟,但立即返回该过程产生的会话ID和线程使用汇报时已完成到数据库。

检查状态

接受会话ID和检查数据库,看看进程已经完成。

我认为有更好的方式来“管理”的线程中运行,但是,我的要求规定,用户应当在发出的请求接收来自REST服务的即时响应。

我正在使用WCF Message属性将XML返回给浏览器,因为可以从任何编程语言调用此应用程序,所以我不能使用传统的WCF和回调(我认为如果我错了,请纠正我)。

有时候我遇到了一个问题,出现错误和iscomplete事件永远不会被写入到数据库中,因此,“检查状态”方法说,这是永远的处理。

有没有人有什么通常做什么可以在这种情况下做什么想法?

谢谢!

杰弗里·凯文撬

+0

不知道这会工作的休息,但一定的限制是一个理想的解决办法是使用WCF的双工通信机制 –

回答

2

您的服务应与客户端的方式来查看当前状态,初始请求返回202 Accepted,或者通过Location头或者部分内容。

当您指示客户端轮询指示的URL以检查当前状态。如果客户刚开始循环,我还建议在此响应中添加一些cache time

你如何处理事情上的服务器是由你,绝不与REST。一方面,我会将所有作为后台线程执行的逻辑放在try/catch中,如果发生错误并返回错误状态,可能会根据具体情况重试该操作。

+0

最好的答案在这里使用的双工通信 –

0

我实现了一个类似的过程导入大型文件/处理,老实说,我从未有过的一个问题。也许解决IsComplete永远不会被设置的原因将会使这个更具弹性。

没有太多的答案,但仍..