Каков наилучший способ реализации фоновых служб для приложения ASP.NET? - PullRequest
6 голосов
/ 14 ноября 2008

Моему приложению ASP.NET требуется несколько вспомогательных служб для периодического запуска в фоновом режиме. Например:

  • Мне нужно запрашивать базу данных (или кэш) каждые 1-5 минут, выявлять просроченные рабочие элементы и уведомлять пользователей по электронной почте
  • Мне нужно создавать ночные отчеты, которые затем отправляются подписчикам
  • Плюс другие системные / не пользовательские задачи администратора

Каков наилучший способ реализации этих услуг? Должен ли я включать их как часть веб-приложения, начиная экземпляр каждого «сервиса» в Application_Start ()? Или создать их в качестве реальных автономных услуг? Если бы они были частью веб-приложения, я потенциально мог бы использовать мое кэшированное хранилище данных, но есть ли недостатки этого подхода?

Спасибо за любой совет.

Ответы [ 5 ]

6 голосов
/ 14 ноября 2008

В этом году мне нужно было выполнить одну задачу для кеширования некоторых данных из базы данных. Она должна была проверять изменяющийся код каждые n минут, я нашел эту очень хорошую статью;

Имитация службы Windows с использованием ASP.NET для запуска запланированных заданий

Я сделал это таким образом, и это сработало, но, как я уже говорил, это была только одна задача, но если вы видите пример выше, вы увидите, что он выполняет несколько задач.

Как вы могли видеть, в кеше вы можете выполнять задачу в любое время и через определенные промежутки времени, ночная задача может выполняться в полночь, остальные - каждые n минут или часов.

Надеюсь, это поможет.

1 голос
/ 14 ноября 2008

Таймер в сочетании с фоновым рабочим работал для меня хорошо:

Timer timer = new Timer(intervalSeconds * 1000)
timer.Elapsed += delegate
{
    // do the meat
};
timer.Start();

Имейте в виду, что у вас не будет доступа к HttpContext и что сайт может закрыться из-за неактивности.

1 голос
/ 14 ноября 2008

Я делаю дополнительные рабочие потоки и потоки, которые периодически что-то делают в моем приложении ASP.NET, и у меня не было никаких проблем.

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

1 голос
/ 14 ноября 2008

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

- Для уведомлений о просроченных рабочих элементах вы можете либо использовать SSRS (упомянутый выше), отправив им отчет с их просроченными элементами, либо, если вы используете SQL 2k5, использовать Notification Services.

0 голосов
/ 16 ноября 2008

Честно говоря, я никогда не был фанатом попыток симулировать службу Windows внутри процесса ASP.net, особенно если учесть, насколько легко создать службу Windows. Большинство попыток, которые я видел при этом, были полны проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...