【问题标题】:WCF Rest Asynchronous Calling MethodsWCF Rest 异步调用方法
【发布时间】:2011-09-24 09:03:09
【问题描述】:

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

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

假设定义了以下方法:

创建请求

启动一个需要 5 分钟的线程,但会立即返回进程生成的会话 ID,该线程用于向数据库报告何时完成。

检查状态

接受会话 id 并检查数据库以查看进程是否已完成。

我不得不认为有更好的方法来“管理”正在运行的线程,但是,我的要求是用户应该在发出请求后立即收到来自 REST 服务的响应。

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

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

有没有人知道通常会做什么以及在这种情况下可以做什么?

谢谢!

杰弗里·凯文·普瑞

【问题讨论】:

  • 不确定这是否适用于 REST,但在一定限制内,理想的解决方案是使用 WCF 的双工通信机制来使用双工通信

标签: c# .net wcf rest asynchronous


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      相关资源
      最近更新 更多