【问题标题】:Run method at specific time MVC application在特定时间运行方法 MVC 应用程序
【发布时间】:2016-09-21 10:45:56
【问题描述】:

我正在开发一个 MVC 应用程序,它有一个方法,应该在一天结束时运行。我无权访问 Windows 任务调度程序,并且无法实现 Windows 服务。 (因为部署的包应该交给不同的客户,他们有自己的服务器。在这种情况下,我们不会部署 windows 服务或使用任务调度程序)

请告诉我是否有任何方法可以在特定时间执行某些方法。 我看到有使用计时器的方法。但问题是这项工作应该每天只做一次,并且过程不会超过 1 分钟。

如果我们使用定时器,资源将分配给定时器服务,我猜这不是一个好方法,因为这种方法一天只运行一次。 (进程在其他 23 小时 59 分钟内运行,这是在浪费资源。我猜计时器的概念是可以的,如果进程每 5,10 分钟运行一次)

请给我方向....

【问题讨论】:

  • 看看石英作业调度器。
  • 实现windows服务是不可能的”,为什么不可能?当项目部署到您的客户时,它可以安装 Windows 服务作为部署过程的一部分...如果您想每天在 客户的机器上执行一次方法,您必须有一些长期的-仍然在运行应用程序
  • 看看 HangFire,它是为您描述的目的而设计的,并且可以在给定的时间触发工作/方法:hangfire.io
  • @Fabjan : 有成千上万的客户在使用我们的应用程序。那么如何一一做到这一点呢?我们只需要部署包并顺利运行系统和调度程序。
  • 我用的是石英。它与 startup.cs 工作正常。但问题是我无法在“执行”方法中初始化类对象,这是方法实现在其他项目中。 (IJob 有一个名为“Execute”的方法)不幸的是,它没有提供复制粘贴代码的工具,到目前为止,我在评论部分通过堆栈溢出所做的事情。我红色的几篇文章,它不能在启动cs或application_start()方法中初始化其他类对象。

标签: c# asp.net-mvc-4 scheduling


【解决方案1】:

最好的方法是使用Quartz.Net

这是一个很好的例子:

http://www.mikesdotnetting.com/article/254/scheduled-tasks-in-asp-net-with-quartz-net

【讨论】:

  • Quartz.net 只是一个库,它不是 windows 进程,它本身并不能解决问题。
【解决方案2】:

我想你已经有一个数据库了。创建一个表,其中包含一个名为 LastRun 的日期时间字段。在此字段中保存您的方法执行的最后日期和时间。

在您的 MVC 应用程序中,在会话开始或应用程序开始时,将 LastRun 日期时间与当前日期时间进行比较,并决定您是否要执行上述方法。方法执行后更新 LastRun 值。

【讨论】:

  • 我只需检查 application_start() 中的以下代码,因为这是一天结束的过程,应该在午夜 12 点运行。 DateTime dt = Convert.ToDateTime("2016/09/22"); if (DateTime.Today == dt) { int x = 5; 我将本地机器时间更改为 2016/09/21 11:59pm 并等待触发 bolow 代码。(在“if”块内添加断点)但它不会触发。
  • 上述方法的缺点是您需要一个新的应用程序或会话启动事件来触发它。
猜你喜欢
  • 2011-09-06
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2018-03-15
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多