在 ASP.Net MVC5 中管理长时间运行的进程

Posted

技术标签:

【中文标题】在 ASP.Net MVC5 中管理长时间运行的进程【英文标题】:Managing Long Running Processes in ASP.Net MVC5 【发布时间】:2014-07-01 13:32:38 【问题描述】:

我正在开发一个 MVC 应用程序,其中有几个长时间运行的进程。 在这个 MVC 应用程序中,我试图从 facebook 中提取朋友并将其存储在 mongoDB 中。

这个过程的步骤如下:-

    从数据库中的通用列表对象中为用户拉取好友。 在另一个通用列表对象中从 facebook 为用户拉取好友。 识别不在数据库中的新朋友。 为现有朋友运行循环并更新现有数据。 在数据库中存储新朋友。有一个

如果他们有大约 50 到 100 个朋友,这很好用。但是如果有 1000 多个朋友,那么网页需要大约 30 多分钟来执行它们。为了执行这个过程,我使用带有 async 和 await 的 Task。我正在通过 jquery AJAX 调用控制器操作。

所以我的问题是,如果它们有 2000 多条记录,那么它会花费太多时间。因此,在研究了我想使用窗口服务从 facebook 提取数据的东西之后。但是我仍在探索选项,因此我没有使用窗口服务。

关于使用窗口服务,我有一些问题:-

    如何从 ASP.Net MVC 启动窗口服务。 如果我可以从 ASP.Net MVC 控制器的窗口服务中传递参数。 如果窗口服务将自动停止完成任务或者我需要停止它 来自网页。 如果窗口服务可以从 ASP.Net MVC 应用程序在窗口 azure 中访问,因为它将托管 在 Azure 中。 从 Azure 中的 MVC 访问窗口服务时是否存在安全问题。

抱歉有太多问题。我之前使用过 Window Service,但它是按时间安排的。所以从 ASP.Net 访问对我来说是新的。

我找到了一篇文章http://weblogs.asp.net/kaushal/start-stop-window-service-from-asp-net-page,但它并没有提供我问题的所有答案。

请在这方面帮助我。提前致谢。

【问题讨论】:

您不一定需要 Windows 服务。有一些 Azure 友好的技术可以在 ASP.NET 中安全地运行代码 in the background。 【参考方案1】:

为什么要从 ASP.Net 启动/停止服务?它是一个 Windows 服务,让它定期运行,比如每天或你想要的任何频率,让它完成工作或读取/写入数据库并合并来自 facebook 的合同。为什么它甚至是一个 ASP.Net 应用程序,如果这就是它的全部功能。?

也许我遗漏了一些东西,但您不需要从您的 Web 应用程序与 Windows 服务进行交互。您需要做的就是查询数据库。让服务在后台定期将 FB 联系人同步到 MongoDB。

【讨论】:

以上是关于在 ASP.Net MVC5 中管理长时间运行的进程的主要内容,如果未能解决你的问题,请参考以下文章

使用长时间运行的方法阻止 ASP.NET Web 窗体中的网页

如何异步运行长时间运行的操作并在 ASP.Net Ajax 中为用户显示加载并轮询结果?

如何使用javascript在asp.net上停止正在进行的回发(长时间运行)?

长时间运行的 ASP.NET MVC 核心控制器 HTTPPost 方法超时

长时间 ASP.NET 操作的 IIS 请求超时

部署在 IIS 上的 ASP.NET Core 对长时间运行的请求返回 502 错误