我正在构建一个将公开多个操作的 WCF 服务,它将在 IIS 中运行,因为它需要 HTTPS 端点。大多数操作将在几秒钟或更短的时间内执行;但是,其中一项或两项操作将需要 5-90 分钟。
该服务的主要消费者将是一个 ASP.NET MVC 应用程序;处理这个问题的正确方法是什么?
我应该提高超时时间并进行一些 ajax 调用吗?我是否应该向我的数据库中添加一个表,让长时间运行的操作更新这个数据库,并让 Web 界面每分钟轮询一次这个表?我不确定什么(如果有)普遍接受的最佳实践。
我为我的高级项目写了类似的东西,基本上是一个作业调度框架。
管理器服务将从数据库中读取队列,并将工作分配给我所有的“工作主机”。我让 Windows 服务执行此任务而不是让 UI 直接与工作主机对话的原因是因为它对整个过程提供了额外的控制级别。
我不喜欢从我的工作主机上“拔下网络电缆”的想法,并且再也不会从这个特定的工作中获得状态更新。因此,Windows 服务让我能够持续监控 WCF 工作主机的进度,如果发生连接错误(或其他意外),我可以将状态更新为失败。因此,没有孤立的工作。