WCF休息异步调用方法

时间:2011-06-28 14:19:37

标签: c# .net wcf rest asynchronous

我有一个我开发的类库,它目前通过WCF REST服务调用密集型处理。

REST服务直接访问类库的DLL,或多或少WCF休息服务是系统的接口。

假设定义了以下方法:

创建请求

启动一个花费五分钟的线程,但会立即返回该进程生成的会话ID,并且该线程用于在数据库完成时向其报告。

检查状态

接受会话ID并检查数据库以查看该过程是否已完成。

我必须认为有一种更好的方法来“管理”运行的线程,但是,我的要求声明用户应该在发出请求时从REST服务收到立即响应。

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

有时我会遇到一个错误发生的问题,并且iscomplete事件永远不会被写入数据库,因此“Check Status”方法表示它正在永久处理。

有没有人对通常做什么以及在这种情况下可以做些什么有任何想法?

谢谢!

Jeffrey Kevin Pry

2 个答案:

答案 0 :(得分:2)

您的服务应在初始请求时返回202 Accepted,以便客户端通过Location标头或内容的一部分检查当前状态。

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

如何处理服务器上的内容取决于您,与REST无关。首先,我会将所有作为后台线程执行的逻辑放在try / catch中,如果发生错误,可以返回错误状态,并可能根据情况重试操作。

答案 1 :(得分:0)

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

答案不多,但仍然......