0

В приложении C#/asp.net я ищу способ запланировать выполнение заданий, которое должно быть выполнено после, в определенный момент времени. Например. 4 февраля 2016 года в 02:00. То есть:Как назначить пакетное задание для выполнения в определенный момент времени?

  1. Существуют ли какие-либо фреймворки, которые могут это сделать (планирование заданий для выполнения в определенный момент времени)? Я знаю Tivoli Workload Scheduler от IBM, но это кажется довольно старым и дорогостоящим.

  2. Было бы неплохо, если бы в фреймворке появилась веб-панель, позволяющая администраторам заданий администрировать (расписание и обзор) заданий.

ответ

2

Hangfire делает именно то, что вы хотите, передавая значение DateTime в графику метод:

BackgroundJob.Schedule(yourMethodCall, new DateTime(2015, 03, 07, 12, 00, 00)) 

Поставляется с хорошим веб передней конец тоже :)

+0

Нет, это не так. Hangfire поддерживает повторяющиеся и отложенные задания, но не планирование по времени. Можно установить задержку на разницу между настоящим и желаемым временем выполнения, но это своего рода хак. – someName

+0

Можно также передать значение DateTime в метод 'Schedule' также -'BackgroundJob.Schedule (methodCall, новый DateTime (2016, 03, 07, 12, 00, 00))' – LDJ

+0

Извините, что вы правы. Действительно, можно назначать задания на фиксированную дату. Интерфейс администратора веб-интерфейса отсутствует, что позволяет просматривать запланированные задачи в режиме просмотра календаря и, в частности, позволяет администраторам планировать задания из этого интерфейса. Это будет приятной особенностью. – someName

0

Если вы работаете на сервере под управлением Windows, то вы может использовать проект с открытым исходным кодом Revalee для решения этой проблемы. Revalee, который работает как служба Windows, сохраняет все запланированные задачи в постоянном хранилище данных (в частности, Extensible Storage Engine (ESE) [aka. JET Blue]), так что вы не потеряете состояние, даже если весь ваш сервер должен перезагрузитесь. Когда ваша задача вызвана, Revalee вызывает ваше приложение, чтобы запустить любую задачу, которую вам нужно выполнить.

Например, из приложения # ASP.NET C вы бы зарегистрировать обратный вызов Revalee как так (после установки & настройки пакета Revalee.Client):

private void ScheduleSendMessage() 
{ 
    // The callback time will be 4 Feb 2016 2:00 UTC (example assumes UTC) 
    DateTimeOffset callbackTime = new DateTimeOffset(2016, 2, 4, 2, 0, 0, 0, TimeSpan.Zero); 
    // The callback url is set (your send message code will reside there) 
    Uri callbackUrl = new Uri("http://mywebapp.com/SendMessage.aspx"); 
    // Register the callback request with the Revalee service 
    RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl); 
}