ASP.网络架构解决方案/建议

本文关键字:建议 解决方案 网络 ASP | 更新日期: 2023-09-27 17:49:14

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

  1. ASP。

  2. WCF实习生触发正在运行的windows服务来执行任务。Windows服务实习生打开多个线程来执行任务

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

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

  1. 是否可以从WCF调用windows服务来执行任务?
  2. 可以不使用windows service来构建这个应用程序吗?

ASP.网络架构解决方案/建议

这是一个好的架构吗?

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

我已经在我当前的项目中使用了这个框架来处理不同类型的长时间运行的任务,它非常可靠,特别是结合了一些客户端通知库,比如angular toasty来指示后台任务的状态。

是否可以从WCF调用windows服务来执行任务?

从技术上讲,这并没有什么不好的,但是你不妨把你的WCF服务托管在一个windows服务中,而不是把它们分开。只是另一个没有实际收益的移动部件。

是否可以在不使用windows的情况下构建此应用程序服务吗?

见上图。

从评论:

不幸的是,从asp.net应用程序启动的任务可能从10分钟到1+小时

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

用户还需要获得任务进度的状态更新。

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

看起来HangFire更像是火和遗忘

Hangfire绝对是即发即忘,但这正是它的健壮之处,并且应该成为任何后台任务运行器实现的一个特性。在我看来,等待某种完成回调事件是棘手和不愉快的。