【问题标题】:Background task / job / process, in asp.net MVC 3后台任务/作业/进程,在 asp.net MVC 3 中
【发布时间】:2015-01-18 18:39:01
【问题描述】:

我不知道从哪里开始或用什么来解决这两个问题:

  1. 我有一个用户模型和一个事件模型(足球比赛、卡丁车比赛等)。我希望在用户创建新事件时向其他用户发送电子邮件。

  2. 我需要“某事”,比如说每 15 分钟检查一次,从数据库中删除所有已经结束的事件(例如:昨天的事件)。

我知道在 Ruby on Rails 中,有观察者和后台工作者,在 MVC3 中有类似的东西吗?还是有其他方法可以做到这一点?

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-3 backgroundworker observers


【解决方案1】:

这类任务更适合从单独的进程(例如 Windows 服务)中完成。你应该在你的网络应用程序中avoid using background tasks

【讨论】:

    【解决方案2】:

    我建议将Quartz.net 用作强大的解决方案,因为它是功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统。

    更多信息:Job Scheduler with asp.net mvc

    【讨论】:

      【解决方案3】:

      确实存在风险。但有时我们不得不采用这个选项,尤其是当我们在紧迫的时间内实施作业队列时。如果您不熟悉 Windows 服务,则需要了解这些内容。

      以下对我有用,(.NET 4.5.2)。一旦我调用InitiateLongRunningProcess 控制器,它就会启动一个长时间运行的进程并返回视图,而无需等待长时间运行的作业。

      public ActionResult InitiateLongRunningProcess(Emails emails)
      {
          if (ModelState.IsValid)
          {
             HostingEnvironment.QueueBackgroundWorkItem(ct => LongRunningProcessAsync(emails.Email));
             return RedirectToAction("Index", "Home");
          }
      
          return View(user);
      }
      

      阅读 Hanselman HowToRunBackgroundTasksInASPNET 的这篇精彩文章

      【讨论】:

        【解决方案4】:

        很晚了,但你应该考虑看看http://hangfire.io/。它是一个了不起的库,并提供了一个完整的 UI 来管理作业:)

        【讨论】:

          猜你喜欢
          • 2023-03-18
          • 2010-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-11
          • 1970-01-01
          • 2011-09-10
          相关资源
          最近更新 更多