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

时间:2012-06-18 17:19:51

标签: c# asp.net .net wcf

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

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. 我选择了在数据库中存储“作业”的“状态”的路径。
  2. 我写了一个实现WCF客户端(代理)的经理Windows服务
  3. 我写了一个实现我的“工作主机”的WCF服务。
  4. 管理器服务将从数据库中读取队列,并将工作分发给我的所有“工作主机”。我有Windows服务执行此任务的原因,而不是直接与工作主机进行UI对话,是因为它对整个过程提供了额外的控制。

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

答案 1 :(得分:0)

看看这个

WCF Long Running Operations 可能还有其他选择,但它们几乎相同。您还可以在以下链接中提出一些推送通知(我假设没有返回任何数据)

WCF Push