使我的ASP.NET代码每天(至少)运行



我在ASP.NET(VB.NET)中编写了一个基于web的程序,用于生成工作计划为我们的50名员工。除了一部分外,其他部分都在工作。我有块名为RunDaily()的代码,每天需要执行1次(或更多)。

有50名员工在使用我的代码。。。我希望至少在任何一天1将导致RunDaily()执行。在周一至周五的一周里,这种情况很容易发生。但在周末,只有0-5名员工可能会使用该程序。在节假日,可能只有大约0-2名员工。

有没有办法保证RunDaily()每天至少运行一次?由于这个基于网络的程序的性质。。。我真的不能保证它将永远发生。

作为临时解决方案,我添加了一个元刷新行,用于刷新每6小时一页。所以,即使我(或任何人)打开他们的浏览器。。。并显示页面。。。RunDaily()将发生。

我甚至把这个网页变成了一些员工浏览器的主页。但我仍然不能确定他们是否会打开他们的在某些周末或节假日浏览。

有更好的方法吗?我要花钱在外面吃吗公司执行http://example.com/MyProgram.aspx为我每天?(有吗这样的公司?)

我建议,你最好写一个单独的程序(例如Windows服务或控制台应用程序和调度作业),它将在你喜欢的时间每天运行一次,这应该运行你的方法。您可以对其进行编程以发出HTTP请求,也可以从DLL中调用方法。

在我的脑海中,你也可以尝试一些工具,可以向你的aspx页面发出HTTPGET请求,并安排它每天运行一次。

然而,为此,你需要一台每天运行的计算机(你能在你的网络服务器上做到这一点吗?)。

创建一个将使用Windows Scheduler调用的页面-将间隔设置为1天。

只需创建一个带有指向所述网页的URL的.bat文件,并让Task Scheduler每24小时运行一次。

您也可以使用Quartz.Net。

 using Quartz;
 using Quartz.Impl;
 using System;
 namespace ScheduledTaskExample.ScheduledTasks
 {
     public class JobScheduler
     {
            public static void Start()
            {
                IScheduler scheduler =  
                      StdSchedulerFactory.GetDefaultScheduler();
                scheduler.Start();
                IJobDetail job = JobBuilder.Create<EmailJob>().Build();
                ITrigger trigger = TriggerBuilder.Create()
                    .WithDailyTimeIntervalSchedule
              (s =>
                 s.WithIntervalInHours(24)
                .OnEveryDay()
                .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0, 0))
              )
            .Build();
        scheduler.ScheduleJob(job, trigger);
    }
}

请参阅相同的参考链接。

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

由于没有解释,我做出了这样的假设:您无法控制运行此web的web服务器,因此在该机器上安装windows服务或添加任务计划是毫无疑问的,并且您还提到您不想在您的盒子上本地托管这样的服务/计划,因此…

如果这是真的,你唯一的选择可能是在其他地方主持这个任务计划。。。Azure Web Job浮现在脑海中。你肯定可以安排网络作业按特定的时间表运行,你可以使用curl.exe或类似的东西来访问你网站中的端点。

要了解有关WebJob的信息,请点击此处。

最新更新