2013-02-25 3 views
10

У меня есть веб-сайт MVC 3 C#, который вытягивает записи из веб-службы. Поскольку набор данных, который он получает от веб-службы, становится все больше и больше, я ищу способ, которым создание кеша не запускается первым пользователем для посещения сайта, пока нет текущего кеша, но по ежедневному графику (например, задание cron, запланированное задание или что-то еще).Запланировать задачу обновления HttpContext.Cache каждый день в определенное время

Как мне это сделать? Нужна ли мне какая-то пусковая библиотека, например, 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 вызывает тайм-аут ошибки

+0

blimey, я не знал, что у других был этот вопрос также, спасибо за upvotes –

ответ

2

Это немного хакерского решения, но вы всегда можете создать запланированную задачу на сервере, который запускает исполняемый файл. Этот исполняемый файл удаляет определенный 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 
} 

Создание запланированной задачи довольно просто, а - просто убедитесь, что вы запустите его в учетной записи пользователя, который имеет разрешения на выполнение ЕХЕ вы создаете и не требуете входа пользователя для запуска задачи.

Edit: Добавлено руководство по настройке запланированное задание на Windows Server 2008

  1. Откройте меню Пуск.
  2. Тип «Планировщик заданий» в окне поиска (в старых версиях Windows я считаю, что это было найдено в «Администрирование» как «Запланированные задания»). Откройте результат планировщика заданий.
  3. Щелкните правой кнопкой мыши на корневом узле дерева слева - «Планировщик заданий (локальный)» и выберите «Создать основную задачу».
  4. Дайте задаче имя и описание, чтобы вы могли идентифицировать его позже. Нажмите "Далее.
  5. Выберите свою продолжительность (в вашем случае ежедневные звуки справа). Нажмите "Далее.
  6. Измените время начала, если хотите. Нажмите "Далее.
  7. Оставьте действие «Запустить программу». Нажмите "Далее.
  8. Нажмите «Обзор ...» и найдите исполняемый файл, который вы создали. Нажмите "Далее.
  9. На последнем экране поставьте галочку в поле «Открыть диалог свойств ...», затем «Готово».
  10. Измените параметры безопасности на «Запустить, был ли пользователь включен или нет». При необходимости измените пользователя или группу на соответствующую учетную запись пользователя (с необходимыми разрешениями для запуска exe).
  11. Нажмите OK. Вам будет предложено ввести пароль учетной записи, который запустит задачу. Сделайте это и нажмите «ОК».
  12. Щелкните левой кнопкой мыши на библиотеке планировщика заданий. Ваша задача должна появиться в списке справа. Вы можете проверить его, щелкнув правой кнопкой мыши и выбрав «Выполнить».
+0

Я никогда не работал с исполняемым файлом на веб-сайте MVC, звучит странно. Или я чего-то не хватает? Вы говорите, что просто создать запланированную задачу. У вас есть пример? –

+0

Исполняемый файл не является частью веб-сайта как такового, вы просто создаете автономный исполняемый файл и помещаете его на сервер за пределами корня веб-сайта. Что касается создания запланированной задачи, я отредактирую свой ответ с руководством по Windows Server 2008 (предполагается, что у вас есть доступ к удаленному рабочему столу на ваш сервер). – Maloric

+0

Благодарим вас за подробный справочник, к сожалению, у меня нет удаленного доступа, но +1 в любом случае, поскольку я знаю, что кому-то понадобится этот ответ. –

Смежные вопросы