【问题标题】:Is it possible to have a time triggered action method in mvc?是否可以在 mvc 中有时间触发的操作方法?
【发布时间】:2019-03-13 01:41:28
【问题描述】:

我正在开发一个 MVC 项目,在该项目中,应用程序必须在一段时间后对数据库进行更改。我正在使用 EF Code-First,我想知道是否有任何方法可以在应用程序中设置时间触发操作方法。如果没有,我该如何进行更改?

【问题讨论】:

  • 由于 MVC 处理请求,我应该在哪里实现没有任何请求的计时器?
  • 调用一个动作究竟有什么意义?您没有从用户那里获得输入,也无法向他们发送任何内容,因此没有任何好处。听起来这是一项计划任务而不是 Web 应用程序的工作。
  • 谢谢,我去看看 Azure 调度器。
  • 如果你想玩一个闪亮的对象:) 你可以随时查看消息队列模式。基本上,您将“消息”写入发件人应用程序中的队列。您创建一个侦听器应用程序,该应用程序异步检查队列并执行一个功能。如果发件人需要确认消息已处理,请使用第二个队列进行报告。

标签: c# sql entity-framework model-view-controller


【解决方案1】:
private static System.Timers.Timer EventTimer = new System.Timers.Timer(1200); //Ticks
EventTimer.Elapsed += new System.Timers.ElapsedEventHandler(eventClp_Elapsed);
EventTimer.Start();

private static void eventClp_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
    EventTimer.Stop();
    //do something
    //you can restart again
}

你可以试试计时器。

【讨论】:

  • 所以我只能在计时器上使用秒数/滴答声?有没有一种更简单的方法可以代替我使用日期。如果我确实使用了计时器,即使没有用户请求,是否可以在另一个方法中调用一个操作方法?
  • 如果您需要以大于秒(可能是几分钟)的任何长度运行某些东西,您将需要查看 IIS 范围之外的某种调度/持久性,因为会话/应用程序将在事件触发之前被杀死(并且应该这样做!)
  • 谢谢,我去看看 Azure 调度器。
  • 我在 windows 服务中使用了相同的方法。它将每 2 分钟检查一次数据库表中的条目,并根据请求类型初始化新线程或计时器。它类似于调度。但 Windows 服务是一个始终运行的应用程序。
猜你喜欢
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多