【问题标题】:how to create cron job in asp.net(v4.0) to run method every 30mins如何在asp.net(v4.0)中创建cron作业以每30分钟运行一次方法
【发布时间】:2014-05-19 05:38:54
【问题描述】:
  1. 我需要一些关于在 asp.net(C#.net) 中创建和运行 Cron 作业以每 30 分钟运行一次的指导。我创建了一个类,其中我编写了用于获取推文、facebook 提要的代码。

  2. 我创建了另一个页面,我有一个按钮来下载推文并保存在数据库中。 如果我想获得推文,我必须每次都点击同步按钮。

  3. 我想创建 cron 作业,以便数据库自动与新推文、facebook 提要同步。

谢谢

【问题讨论】:

    标签: c# asp.net facebook twitter cron


    【解决方案1】:

    您可以采用以下任何一种方法

    1. 创建一个控制台应用程序,其中包含获取推文和提要的逻辑,并使用任务调度程序每 30 分钟运行一次。

    2. 您可以构建一个 Windows 服务,该服务在计时器内轮询提要并更新数据库。

    3. 您可以签出this 调度程序,它大致相当于 cron 作业。个人没试过。看看这个SO

    【讨论】:

    • 我们正在使用godaddy托管,所以可以使用windows服务
    • 如果是共享托管环境,您可能极不可能托管 Windows 服务。我可能是错的。我不知道。您可以查看this existing SO。希望对你有帮助
    【解决方案2】:

    如果您计划的 30 分钟计划任务是一个离散的事务操作(例如,同步某些数据库值的示例),那么您可能需要查看 Revalee 开源项目.

    您可以使用它在特定时间安排网络回调。在您的情况下,您可以安排网络回调(未来 30 分钟)。当您的 ASP.NET 应用程序收到回调时,它可以安排下一个 30 分钟的回调以及执行您需要它每半小时处理的任何任务。当您的 ASP.NET 应用程序第一次启动时,您将安排第一个 Web 回调。由于您的 Web 应用程序正在被回调,因此您无需担心 Web 应用程序的卸载(例如,它会在 IIS 上定期执行此操作)。

    例如使用 Revalee,您可以执行以下操作:

    1. 在您的应用程序通过ScheduleThirtyMinuteCallback() 方法启动时注册未来(从现在起 30 分钟)回调(见下文)。

      private DateTimeOffet? previousCallbackTime = null;
      
      private void ScheduleThirtyMinuteCallback()
      {
          // Schedule your callback 30 minutes from now
          DateTimeOffset callbackTime = DateTimeOffset.Now.AddMinutes(30.0);
      
          // Your web service's Uri, including any query string parameters your app might need
          Uri callbackUrl = new Uri("http://yourwebapp.com/Callback.aspx");
      
          // Register the callback request with the Revalee service
          RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl);
      
          previousCallbackTime = callbackTime;
      }
      
    2. 当网络计划任务激活并回调您的应用程序时,您每 30 分钟执行一次您需要执行的任何操作并且您也计划下一次回调。为此,您可以将以下方法调用 (CallbackMonitor()) 添加到您的 Callback.aspx 页面处理程序中。

      private void CallbackMonitor()
      {
          if (!previousCallbackTime.HasValue 
              || previousCallbackTime.Value <= DateTimeOffset.Now.AddMinutes(-30.0))
          {
              // Perform your "30 minutes have elapsed"-related tasks
              // ...do your work here...
      
              // Schedule subsequent 30 minute callback
              ScheduleThirtyMinuteCallback();
          }
      }
      

    需要明确的是,Revalee 服务不是外部 3rd 方在线调度服务,而是您在自己的网络上安装完全控制的 Windows 服务。它驻留并运行在您自己选择的服务器上,很可能是您的 Web 服务器(但这不是必需的),它可以在其中接收来自您的 ASP.NET 应用程序的回调注册请求。

    但是,如果您的“每 30 分钟运行一次”任务是一项长时间运行的任务,那么您可能不想将该功能嵌入到您的 ASP.NET 应用程序中。

    我希望这会有所帮助。

    免责声明:我是参与 Revalee 项目的开发人员之一。然而,需要明确的是,Revalee 是免费的开源软件。源代码在GitHub 上提供。

    【讨论】:

    • 谢谢。不幸的是,我没有托管在专用服务器上,所以我无法安装 Revalee 来使用它。
    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 2020-02-23
    • 1970-01-01
    • 2021-06-17
    • 2013-11-27
    • 2014-10-16
    • 2016-02-04
    • 2017-10-15
    相关资源
    最近更新 更多