我有一个我开发的类库,它目前通过WCF REST服务调用密集型处理。
REST服务直接访问类库的DLL,或多或少WCF休息服务是系统的接口。
假设定义了以下方法:
创建请求
启动一个花费五分钟的线程,但会立即返回该进程生成的会话ID,并且该线程用于在数据库完成时向其报告。
检查状态
接受会话ID并检查数据库以查看该过程是否已完成。
我必须认为有一种更好的方法来“管理”运行的线程,但是,我的要求声明用户应该在发出请求时从REST服务收到立即响应。
我正在使用WCF Message属性将XML返回给浏览器,因为可以从任何编程语言调用此应用程序,我不能使用经典的WCF和回调(我想,如果我错了,请纠正我)。
有时我会遇到一个错误发生的问题,并且iscomplete事件永远不会被写入数据库,因此“Check Status”方法表示它正在永久处理。
有没有人对通常做什么以及在这种情况下可以做些什么有任何想法?
谢谢!
Jeffrey Kevin Pry
答案 0 :(得分:2)
您的服务应在初始请求时返回202 Accepted,以便客户端通过Location标头或内容的一部分检查当前状态。
当您指示客户端时,然后轮询指示的URL以检查当前状态。如果客户端刚刚开始循环,我还建议在此响应中添加一些cache time。
如何处理服务器上的内容取决于您,与REST无关。首先,我会将所有作为后台线程执行的逻辑放在try / catch中,如果发生错误,可以返回错误状态,并可能根据情况重试操作。
答案 1 :(得分:0)
我实现了一个类似的导入/处理大文件的过程,说实话,我从来没有遇到过问题。也许解决IsComplete永远不会被设置的原因会使这更具弹性。
答案不多,但仍然......