Запланируйте обновление задачи HttpContext.Cache каждый день в определенное время.
У меня работает веб-сайт MVC 3 C#, который извлекает записи из веб-службы. По мере того, как набор данных, который он получает от веб-сервиса, становится все больше и больше, я ищу способ, при котором создание его кеша инициируется не первым пользователем, посещающим сайт, пока нет текущего кеша, а по ежедневному расписанию. (например, работа cron, запланированное задание или что-то в этом роде).
Как мне это сделать? Нужна ли какая-то триггерная библиотека, такая как Quartz.net? (Я бы предпочел использовать более простое решение)
Теперь у меня в контроллере есть:
private List<DataSummary> GetSummaries()
{
//get summaries from cache if available
List<DataSummary> summaries = (List<DataSummary>)HttpContext.Cache["SummariesCache"];
if (summaries == null)
{
//cache empty, retrieve values
summaries = _webservice.GetSummaries();
//cache it
HttpContext.Cache.Add("SummariesCache", summaries, null, DateTime.Now.AddHours(12), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}
return summaries;
}
редактировать
с помощью CacheItemRemovedCallback
вызывает ошибки тайм-аута
1 ответ
Это немного хакерское решение, но вы всегда можете создать запланированное задание на сервере, на котором выполняется исполняемый файл. Этот исполняемый файл попадает на определенный URL-адрес вашего веб-сайта, который, в свою очередь, заполняет кэш точно так, как вы обрисовали выше. Чтобы попасть по URL в исполняемом файле, вам нужно что-то вроде этого:
var req = (HttpWebRequest)WebRequest.Create(URL);
req.Timeout = 30000;
req.KeepAlive = false;
req.Method = "GET";
var res = (HttpWebResponse)req.GetResponse();
if (res.StatusCode == HttpStatusCode.OK){
// Your cache should be refreshed
}
Создание запланированной задачи также довольно просто - просто убедитесь, что вы запускаете ее с учетной записью пользователя, которая имеет разрешения на выполнение исполняемого файла, который вы создаете, и не требует входа пользователя в систему для запуска задачи.
Изменить: Добавлено руководство по настройке запланированных задач в Windows Server 2008
- Откройте меню "Пуск".
- Введите "Планировщик заданий" в поле поиска (в более старых версиях Windows я считаю, что это было найдено в средствах администрирования как "Запланированные задачи"). Откройте результат планировщика заданий.
- Щелкните правой кнопкой мыши корневой узел дерева слева - "Планировщик заданий (локальный)" - и выберите "Создать базовое задание".
- Дайте заданию название и описание, чтобы вы могли определить его позже. Нажмите кнопку "Далее.
- Выберите продолжительность (в вашем случае ежедневно звучит о праве). Нажмите кнопку "Далее.
- Измените время начала, если хотите. Нажмите кнопку "Далее.
- Оставьте действие как "Запустить программу". Нажмите кнопку "Далее.
- Нажмите "Обзор..." и найдите созданный вами исполняемый файл. Нажмите кнопку "Далее.
- На последнем экране установите флажок "Открыть диалоговое окно свойств...", а затем "Готово".
- Измените параметры безопасности на "Запускать независимо от того, вошел пользователь в систему или нет". При необходимости измените пользователя или группу на соответствующую учетную запись пользователя (ту, которая имеет необходимые разрешения для запуска exe-файла).
- Нажмите ОК. Вам будет предложено ввести пароль учетной записи, которая будет запускать задачу. Сделайте это и нажмите ОК.
- Нажмите на библиотеку планировщика задач слева. Ваша задача должна появиться в списке справа. Вы можете проверить это, щелкнув правой кнопкой мыши и выбрав Run.