Лучшая реализация фоновой службы ASP.NET - PullRequest
1 голос
/ 15 сентября 2009

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

  1. Обратный вызов таймера

    Timer timer = new Timer(new TimerCallback(MyWorkCallback), HttpContext, 5000, 5000);
    
  2. Тема или ThreadPool

    Thread thread = new Thread(Work);
    thread.IsBackground = true;
    thread.Start();
    
  3. BackgroundWorker

    BackgroundWorker worker = new BackgroundWorker(); 
    worker.DoWork += new DoWorkEventHandler(DoMyWork);
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DoMyWork_Completed); 
    worker.RunWorkerAsync();
    
  4. Кэширование как http://www.codeproject.com/KB/aspnet/ASPNETService.aspx (находится в посте Джеффа Этвуда здесь )

Мне нужно запустить несколько фоновых «сервисов» в указанное время. Одна служба может запускаться каждые 5 минут, а другая - один раз в день. Никогда не будет запущено более 10 служб одновременно.

Ответы [ 3 ]

2 голосов
/ 15 сентября 2009

Ну, вместо «простого потока», вы бы выбрали ThreadPool.

А если бы это был я, я бы запустил его в службе Windows и связался с ним через MSMQ.

0 голосов
/ 20 апреля 2010

Ни одно из предложений исходного постера не масштабируется более чем на один сервер.

Я хочу то же самое: Надежный и простой в использовании способ планирования регулярных фоновых задач и выполнения сложной тяжелой обработки (перестройка кэшей и т. Д.) Без влияния на запросы текущих пользователей.

Я хочу, чтобы задачи выполнялись в контексте веб-приложений, чтобы: а) получить конфигурацию из web.config (избегать дублирования конфигурации) и б) развернуть с веб-приложением (упростить развертывание). И Мне это нужно для работы веб-сайтов, распространяющихся на более чем один сервер.

Я нашел только один подход, который обеспечивает то, что я хочу:

(1) Создайте страницу .aspx для каждой задачи и настройте запланированное задание wget на одном отдельном сервере, который вызывает этот файл .aspx на веб-сайте. Я реализовал этот подход, и он работает, но он мне не нравится на 100% из-за зависимости от запланированных задач, и он не дает мне возможности выполнять сложные задачи ad hoc в фоновом режиме

0 голосов
/ 30 сентября 2009

Вы должны реализовать некоторые состояния задач. После перезагрузки приложения фоновый сервис должен восстанавливать неработающие задачи. Если задачи находятся в транзакциях, то с таким поведением проблем не будет.

...