2008-11-13 3 views
6

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

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

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

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

+0

См. Также http: // stackoverflow.com/questions/1424837/best-asp-net-background-service-реализация – spoulson

ответ

6

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

Simulate a Windows Service using ASP.NET to run scheduled jobs

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

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

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

1

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

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

+0

Если вы используете SQL 2008, не используйте Notification Services, поскольку они удалили его. – gbjbaanb

1

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

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

1

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

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

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

0

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

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

  • Нет связанных вопросов^_^