Запланированные задачи для веб-приложений

Каковы различные подходы для создания запланированных задач для веб-приложений с отдельным веб-приложением или приложением для настольного компьютера или без него?

22.08.2008 20:22:47
11 ОТВЕТОВ
РЕШЕНИЕ

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

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

4
22.08.2008 21:05:34

Я думаю, что само переполнение стека использует срок действия ApplicationCache для запуска фонового кода через определенные промежутки времени.

2
22.08.2008 20:24:12

Если вы используете Linux, вы почти наверняка будете использовать cron .

2
22.08.2008 20:24:55

В Linux вы можете использовать задания cron ( http://www.unixgeeks.org/security/newbie/unix/cron-1.html ) для планирования задач.

Используйте средства извлечения URL, такие как wget или curl, для выполнения запросов HTTP GET.

Защитите свои URL-адреса с помощью аутентификации, чтобы никто не мог выполнять задачи, не зная пользователя / пароля.

1
22.08.2008 20:26:04

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

1
22.08.2008 20:33:13

Это может или не может быть то, что вы ищете, но прочитайте эту статью « Имитация службы Windows с использованием ASP.NET для запуска запланированных заданий ». Я думаю, что StackOverflow может использовать этот метод, или, по крайней мере, об этом говорили.

1
22.08.2008 20:36:20

Очень простой метод, который мы использовали там, где я работаю:

  1. Настройте веб-сервис / веб-метод, который выполняет задачу. При желании этот веб-сервис может быть защищен с помощью имени пользователя / пароля.
  2. Создайте консольное приложение, которое вызывает этот веб-сервис. При желании консольное приложение может отправлять параметры и / или возвращать какие-то метрики для вывода на консоль или во внешнее ведение журнала.
  3. Запланируйте этот исполняемый файл в выбранном планировщике задач.

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

1
22.08.2008 20:59:15

Джефф обсуждал это в блоге Stack Overflow - http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

По сути, Джефф предложил использовать CacheItemRemovedCallback в качестве таймера для вызова определенных задач.

Я лично считаю, что автоматизированные задачи должны обрабатываться как служба, запланированная задача Windows или задание в SQL Server.

Под Linux извлекайте cron.

4
21.10.2011 22:28:38

Используйте средства извлечения URL, такие как wget или curl, для выполнения запросов HTTP GET.

Защитите свои URL-адреса с помощью аутентификации, чтобы никто не мог выполнять задачи, не зная пользователя / пароля.

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

1
22.08.2008 21:02:13

Ява и весна - используйте кварц. Очень красиво и надежно - http://static.springframework.org/spring/docs/1.2.x/reference/scheduling.html

1
15.09.2008 20:08:00

Я думаю, что есть более простые способы, чем использование cron (Linux) или Task Scheduler (Windows). Вы можете встроить это в свое веб-приложение, используя: (а) кварцевый планировщик,

или если вы не хотите интегрировать другую стороннюю библиотеку в ваше приложение: (b) создайте поток при запуске, который использует стандартный класс Java 'java.util.Timer' для запуска ваших задач.

0
23.09.2011 07:29:57
Большая ошибка в этом состоит в том, что когда у вас веб-служба работает на нескольких узлах, вы не захотите, чтобы ваш планировщик работал несколько раз одновременно.
Chris Seufert 10.11.2014 01:01:07