使用IIS中托管的WCF处理长时间运行的服务操作的正确方法是什么?

Nat*_*ate 10 .net c# asp.net wcf

我正在构建一个将公开几个操作的WCF服务,它将在IIS中运行,因为它需要HTTPS端点.大多数操作将在几秒或更短的时间内完成; 但是,这些操作中的一个或两个将需要5-90分钟.

该服务的主要使用者是ASP.NET MVC应用程序; 处理这个问题的正确方法是什么?

我应该加满超时并做一些ajax调用吗?我应该向我的数据库中添加一个表,并让长时间运行的操作更新此数据库,并让Web界面每分钟轮询一次这个表吗?我不确定通常接受的最佳做法是什么(如果有的话).

小智 1

我为我的高级项目写了类似的东西,基本上是一个作业调度框架。

  1. 我选择将“作业”的“状态”存储在数据库中。
  2. 我编写了一个实现 WCF 客户端(代理)的管理器 Windows 服务
  3. 我编写了一个 WCF 服务来实现我的“工作主机”。

管理器服务将从数据库中读取队列,并将工作分发给我的所有“工作主机”。我让 Windows 服务执行此任务而不是让 UI 直接与工作主机对话的原因是因为它对整个过程提供了额外的控制级别。

我不喜欢从我的工作主机上“拔掉网络电缆”,并且再也不会从这个特定的作业中获得状态更新的想法。因此,Windows 服务使我能够持续监视 WCF 工作主机的进度,如果发生连接错误(或其他意外情况),我可以将状态更新为失败。因此,没有孤立的工作。