ASP.Net MVC中的长时间运行过程

时间:2016-06-07 13:18:45

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

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

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

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

此致 巴拉

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我会选择Windows服务方法。主要原因是您可以密切关注同时运行的实例数量,并在需要时对其进行限制。你没有得到与exe相同的控件。使用相同的状态方法,这将工作正常。

你把它从网络应用程序中删除是正确的,你真的不想对它施加这种压力。您甚至可以在不同的服务器上运行该服务,以使网络更轻。