【问题标题】:How to develop Rest service for handling long term jobs如何开发用于处理长期工作的 Rest 服务
【发布时间】:2017-03-25 22:24:32
【问题描述】:

我需要创建一个服务来处理长时间执行的作业。目前我正在尝试使用例如端点“POST /api/start”开发WebAPI REST服务,它将返回JobId。之后,我将使用“GET /api/status/{jobId}”等其他端点轮询服务。

问题是 REST 服务不能有状态,或者至少这不是好的做法。也许您可以建议我一些将服务与实际 JobHandler 分开的好方法?或者,如果可以在 WebAPI 中执行此操作,请说明如何创建单调,直到 IIS 重置后才会释放。

谢谢。

更新: 经过所有调查后,我决定创建 WebAPI REST 服务来与客户端进行通信,并且对于长时间执行的作业,我使用 WCF 通信层开发了 WindowsService。这是我能找到的最好的解决方案,它非常适合我。谢谢大家。

【问题讨论】:

  • 我必须承认,这不是我有丰富经验的领域(实际上,我也很想听听这个问题的答案),但服务可以吗?在服务器上启动一个可执行文件来完成这项工作(或者这不是您的想法)?
  • @EJoshuaS 我想在内存中执行操作,因为我想控制它的进度,我不确定是否可以启动 exe。还是我错了?
  • 取决于您所说的“控制”。您可以在启动时向它传递参数和/或使用消息队列或数据库在运行时向它传递信息。

标签: c# rest wcf asp.net-web-api


【解决方案1】:

This 可能会有所帮助。

如果你想坚持轮询,你应该创建一个新的 REST 资源,其中包含实际状态和长时间运行任务的进度。

【讨论】:

  • 非常感谢,但我正在考虑的问题是如何使WebAPI服务正确有状态,因为据我所知,它将在20分钟内最后一次请求后停止(默认)并且所有作业都将被删除。如何避免这种情况?
  • 使用在 IIS 上下文之外运行的应用程序。好的答案是[这里]stackoverflow.com/questions/17726002/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多