【问题标题】:Long running process in ASP.Net MVC [closed]ASP.Net MVC 中的长时间运行进程 [关闭]
【发布时间】:2016-06-07 13:18:44
【问题描述】:

我们有一个长期运行的报告,现在使用 Reporting Services 安排。该报告运行大约 40 分钟,并生成大约 10 MB 数据的 csv 报告。我们现在正在构建一个新的 Asp.Net MVC 应用程序,用户希望我们将这个长期运行的报告带入 ASP.Net MVC 并停用报告服务。最初我们想用 Task.Run/HostingEnvironment.QueueBackgroundWorkItem 来做,但由于应用程序域回收问题我们离开了,我们不希望我们的工作进程承担这个负载。

目前,我们正计划构建一个命令行 C# exe,它可以运行存储过程并将 CSV 报告准备到共享文件夹中。然后我们将有一个 ASP.Net MVC 视图,用户可以在其中通过 system.diagnostics.process.start() 方法启动命令行 exe。完成该过程后,ASP.NET MVC 会将报告显示为可下载链接。我们将有一个状态数据库表,一旦进程完成,exe 可以更新状态,Asp.Net MVC 视图可以使用它来显示状态和可下载的报告。

有没有更好的方法来处理这个要求?提前致谢!

问候, 巴拉

【问题讨论】:

  • 为什么用户要决定任何技术决策?从技术角度来看,生成长期运行报告的报告服务听起来很棒。为什么要退役?
  • 更好的方法是使用专门的服务(不是 Web 服务)来监听报告请求。使用消息队列使消息持久化,并在服务失败时将其返回队列或解锁。 40 分钟是一个非常长的过程,应该分解成多个部分(CQRS、工作流、saga 等)。

标签: c# asp.net asp.net-mvc multithreading task


【解决方案1】:

我会选择 Windows 服务方法。主要原因是您可以密切关注同时运行的实例数量,并在需要时对其进行限制。您无法通过 exe 获得相同类型的控制。使用相同的状态方法,就可以了。

您将其排除在 Web App 之外是正确的,您真的不想对它施加那种压力。您甚至可以在不同的服务器上运行该服务,以使 Web 更轻松。

【讨论】:

    【解决方案2】:

    我认为这是一种足够有效的方法。但是,运行 EXE 需要完全信任的环境,这通常不是一个好主意。就个人而言,我会改用HangFire 之类的东西。

    【讨论】:

    • 谢谢克里斯。让我也检查一下 HangFire。
    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2013-09-05
    • 1970-01-01
    相关资源
    最近更新 更多