在 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上停止正在进行的回发(长时间运行)?