在 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 中管理长时间运行的进程的主要内容,如果未能解决你的问题,请参考以下文章