ASP.Net 架构 solution/suggestion

ASP.Net Architecture solution/suggestion

我们的应用程序架构有 3 个组件; ASP.Net Web、WCF 服务和 Windows 服务。

  1. ASP.Net Web 应用程序调用 WCF 来执行任务。

  2. WCF 实习生触发 运行 windows 服务来执行任务。 Windowsservice intern开多线程执行任务

  3. Windows 服务使用任务的进度状态更新数据库,Web 应用程序读取状态更新给用户。 Web 应用程序由单独的团队开发,而其他团队负责 WCF 和 Windows 服务。

开发 windows 服务而不只是 WCF 的原因是需要打开多个线程作为任务完成的一部分。由于 WCF 只能用作 Web 应用程序的即发即忘功能,因此其他团队决定使用 windows 服务。另外(根据其他团队的研究)在 WCF 中退出任务时不可能关闭所有线程。

  1. 这是一个好的架构吗?
  2. 可以从 WCF 调用 windows 服务来执行任务吗?
  3. 是否可以在不使用 windows 服务的情况下构建此应用程序?

Is this a good architecture?

同意其他评论者的意见,您可以在 ASP.NET 中使用 hangfire 之类的东西来处理后台任务来完成整个解决方案。

我在我当前的项目中使用这个框架来处理不同类型的长期 运行ning 任务,它非常可靠,特别是与某种客户端通知库结合使用 angular toasty 来指示后台任务的状态。

Is it OK to call windows service to perform the task from WCF?

这在技术上没有任何问题,但您最好在 windows 服务中托管 WCF 服务,而不是将它们分开。只是另一个没有实际收益的移动部分。

Is it possible to architect this application without using windows service ?

见上文。

来自评论:

Unfortunately the task that gets initiated from asp.net application might go on from 10 minutes to 1+ hr

我们的一些后台任务需要超过 30 分钟,但 none 还需要一个小时。虽然不能保证 IIS 工作线程会挂起足够长的时间来完成工作,但 hangfire 提供了一个铁定的保证,即无意中卸载的工作将重新 运行 并最终成功。这是自动的,不需要额外的配置。

also user needs to get status update on progress of the task.

正如我在最初的回答中所说,我们通过客户端轮询实时提供状态指示(作业类型、已用时间、预计完成时间等)。我们实际上轮询 hangfire 数据库(不是推荐的方法,但对我们来说足够安全),但您也可以点击内存中的 hangfire 作业管理器来检索此信息(这是推荐的方法)。

Looks like HangFire is more like fire and forget

Hangfire 绝对是即发即忘,但这正是它强大的原因,并且应该是任何后台任务 运行ner 实现的一个特性。在我看来,等待某种完成回调事件是棘手且令人不快的。