Запланированные задачи - страница aspx, которая будет вызываться в запланированное время на сервере

У меня есть один веб-сайт asp.net. Теперь я хочу, чтобы страница .aspx вызывалась в определенное время каждый день. (Без планировщика окон/службы Windows).

Я хочу выполнить эту задачу без планировщика окон и службы Windows, потому что у некоторых клиентов нет доступа к ядру / консоли Windows Server, поэтому они не могут устанавливать службы или планировщик заданий Windows.

По сути, мне нужно иметь запланированную задачу БЕЗ установки чего-либо в ОС Windows. Нет ни .exe, ни оконной службы, потому что я размещаю приложение на веб-ферме и не хочу иметь выделенный компьютер с окном для настройки исполняемого файла или службы Windows или планировщика заданий Windows для вызова этого .aspx страница

Любая помощь будет оценена !

Спасибо


person prog1011    schedule 07.03.2017    source источник


Ответы (2)


Попробуйте hangfire — это обработчик заданий, работающий через asp.net.

Код будет таким:

RecurringJob.AddOrUpdate( () => YourJobHere(), Cron.Daily);

person Ygalbel    schedule 07.03.2017

Потратив около 30-35 часов на поиск решения, я нашел обходной путь quartz.dll. Он доступен в C#. Используя Quartz, мы можем очень легко запланировать или вызвать любой JOB/C# function.

Нам просто нужно инициировать нашу работу в событии Application_Start из файла Global.asax.

Для большего понимания вы можете обратиться к приведенному ниже коду, который идеально подходит для меня!

Gloabl.asax: -

void Application_Start(object sender, EventArgs e)
{
  SchedulerUtil schedulerUtil = new SchedulerUtil();
  schedulerUtil.StartJob();
}

в Class SchedulerUtil.cs :-

public void StartJob()
{
  IScheduler iPageRunCodeScheduler;
  string SCHEDULE_RUN_TIME = "05:00"; // 05:00 AM
  // Grab the Scheduler instance from the Factory 
  iPageRunCodeScheduler = StdSchedulerFactory.GetDefaultScheduler();


  TimeSpan schedularTime = TimeSpan.Parse(SCHEDULE_RUN_TIME);
  iPageRunCodeScheduler.Start();
  DbCls obj = new DbCls();
  // define the job and tie it to our class
  DateTime scheduleStartDate = DateTime.Now.Date.AddDays((DateTime.Now.TimeOfDay > schedularTime) ? 1 : 0).Add(schedularTime);
  //IJobDetail job = JobBuilder.Create<Unity.Web.Areas.Admin.Controllers.CommonController.DeleteExportFolder>()
  IJobDetail job = JobBuilder.Create<JobSchedulerClass>() // JobSchedulerClass need to create this class which implement IJob
      .WithIdentity("job1", "jobGrp1")
      .Build();

  // Trigger the job to run now, and then repeat every 10 seconds
  ITrigger trigger = TriggerBuilder.Create()
      .WithIdentity("trigger1", "jobGrp1")
      //.StartNow()
      .StartAt(scheduleStartDate)
      .WithSimpleSchedule(x => x
          //.WithIntervalInHours(24)
          .WithIntervalInSeconds(15)
          .RepeatForever())
      .Build();

  // Tell quartz to schedule the job using our trigger
  iPageRunCodeScheduler.ScheduleJob(job, trigger);
}

В JobSchedulerClass.cs :-

  public class JobSchedulerClass : IJob
  {
    public void Execute(IJobExecutionContext context)
    {
      Common obj = new Common();
      obj.ScheduledPageLoadFunction();
    }
  }
person prog1011    schedule 08.03.2017