【问题标题】:ASP.Net Architecture solution/suggestionASP.Net 架构解决方案/建议
【发布时间】:2015-07-27 20:23:42
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 1.不,太复杂了。您可以在 ASP.NET 中完成所有这些操作
  • 怎么样?使 asp.net 成为多线程应用程序不会造成复杂性吗?此外,我们希望将责任分成 b/w 2 个团队,因为两个团队对其他任务的了解都有限
  • 是什么让你觉得 WCF 不能做线程?
  • 您可以有效地管理 ASP .NET 应用程序中的线程,并且对于跨团队共享,您可以使用组件和库,我认为这两个因素不会影响我的决定,如果我会在你的情况。也就是说,还有其他因素。如果任务长时间运行且密集,它们可能会影响运行 ASP .NET 应用程序的 Web 服务器的性能。如果在将工作负载转移到另一台机器时我想着火并忘记这种情况,我会考虑使用队列,例如RabbitMQ。 Web App 加入队列,worker 读取它

标签: c# asp.net wcf architecture windows-services


【解决方案1】:

这是一个好的架构吗?

同意其他评论者的观点,您可以在 ASP.NET 中使用 hangfire 之类的东西来处理后台任务。

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

可以调用windows服务从WCF执行任务吗?

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

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

见上文。

来自 cmets:

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

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

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

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

看起来 HangFire 更像是火然后忘记

Hangfire 绝对是一劳永逸,但这正是它强大的原因,并且应该是任何后台任务运行程序实现的一个功能。在我看来,等待某种完成回调事件既棘手又令人不快。

【讨论】:

  • 刚刚快速浏览了一下 Hangfire...看起来不错。不幸的是,从 asp.net 应用程序启动的任务可能会持续 10 分钟到 1+ 小时。用户还需要获取任务进度的状态更新。看起来 HangFire 更像是火,然后忘记。因此,我们考虑让 Windows 服务执行长时间运行的任务,并根据 asp.net Web 应用程序可以读取的进度更新数据库。
  • @bp581 - 请参阅对我的回答进行编辑以解决您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多