ASP.Net架构解决方案/建议

时间:2015-05-15 19:38:14

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

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

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

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

  3. Windows服务使用任务上的进度状态更新数据库,Web应用程序将向用户读取状态更新。 Web应用程序由独立团队开发,而其他团队负责WCF和Windows服务。
  4. 开发Windows服务而不仅仅是WCF的原因是由于需要在任务完成时打开多个线程。由于WCF只能用作火灾而忘记来自Web应用程序,因此其他团队决定使用Windows服务。同样(根据其他团队研究),在退出WCF中的任务时,不可能关闭所有线程。

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

1 个答案:

答案 0 :(得分:3)

  

这是一个很好的架构吗?

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

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

  

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

在技术上没有什么可以解决这个问题,但你也可以在Windows服务中托管你的WCF服务,而不是将它们分开。只是另一个没有实际收获的活动部分。

  

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

见上文。

来自评论:

  

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

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

  

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

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

  

看起来HangFire更像是火,忘了

Hangfire肯定是火不会忘记,但这就是它的强大功能,应该是任何后台任务运行器实现的功能。在我看来,等待某种完成回调事件是棘手和令人不快的。