【问题标题】:How to call "Action Result" ASP.NET MVC at specific time (Daily)如何在特定时间调用“Action Result”ASP.NET MVC(每日)
【发布时间】:2016-12-31 20:15:46
【问题描述】:

我有一个在特定时间向用户发送电子邮件的系统。 内置在 ASP.NET MVC4 中,并有一个动作结果“功能”,用于检查消息的时间,如果消息的日期是今天,则发送它。

我怎样才能有效地调用这个动作结果(每天)——就像一个调度程序——?

谢谢。

【问题讨论】:

  • 我肯定会创建一个单独的应用程序来发送电子邮件并在服务器上设置一个计划任务来每天运行它。像这样在 Web 应用程序中设置计时器是有风险的。如果应用程序在一段时间内没有被访问,IIS 可能会卸载它以及您的日常任务。
  • 如果您对使用 MVC 操作不是那么严格,请查看 hangfire.io。这很棒。 hangfire.io

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


【解决方案1】:

虽然单独的服务/应用程序会更好,但您可以使用wget

GNU Wget 是一个使用 HTTP 检索文件的免费软件包, HTTPS 和 FTP,最广泛使用的 Internet 协议。它是一个 非交互式命令行工具,因此可以很容易地从 脚本、cron 作业、不支持 X-Windows 的终端等。

然后你会做这样的事情:

"C:\Program Files (x86)\GnuWin32\bin\wget.exe" --no-check-certificate https://www.exammple.com/YouController/YourAction -O NUL

.bat 文件中,并将其设置为在您需要的时间通过 Windows 计划任务运行(假设您不需要每 60 秒运行一次 - 如果您这样做,请告诉我我有另一种解决方法是使用 Windows 服务来调用 bat 文件)。

省略 -O NUL 部分也将保存输出,以便您可以通过以下操作查看是否一切顺利:

public ActionResult YourAction()
{
    //Do your code, get some stats that show it ran properly.
    return Content("Return your stats here.");
}

来自您的控制器操作。

【讨论】:

  • 如果时间是一天、小时和分钟,我的意思是我想在特定时间发送电子邮件,例如:26/8/2016 03:44 pm?
  • 您可以设置计划任务来做到这一点。将其设置为在该时间开始,并且每 24 小时运行一次。您可以做的另一件事是在 Action 中添加检查以确保时间正确,如果不正确,则休眠一秒钟。
【解决方案2】:

当您将新应用程序创建为 Windows 服务时,效率会更高。您可以轻松设置代码以在特定时间开始。在这个解决方案中,您将拥有更多的灵活性和独立性。您可以开始租用:Windows Service to run a function at specified time

【讨论】:

    【解决方案3】:

    您可以创建一个小型控制台应用程序,该应用程序只调用 API 并发送电子邮件。然后,您可以使用 Windows 调度程序安排控制台应用程序在特定时间运行;您甚至可以在不显示控制台窗口的情况下运行它。有关如何安排任务的详细信息,请参阅 herehere

    【讨论】:

      【解决方案4】:

      使用 Azure Functions,这正是它的目的所在。真的很不错。

      https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2013-05-15
        相关资源
        最近更新 更多