запущенный таймер от global.asax vs quartz.net

Я разрабатываю сайт asp.net, который нужно ежедневно посещать на нескольких сайтах социальных сетей для получения общих данных о друзьях / последователях. В качестве хостинга я выбрал бизнес-класс arvixe. В будущем, если мы вырастем, я бы хотел перейти на выделенный сервер и запустить службу Windows, однако, поскольку на данный момент это еще не решено, мне нужен еще один надежный способ выполнения запланированных задач. Я знаком с запуском таймера потока из app_code (global.aspx). Однако повторное использование пула приложений вызовет некоторые проблемы с таймером. Я никогда не использовал планирование задач, как кварц, но много читал об этом в stackoverflow. Я искал совета, как достичь своей цели. Одна большая проблема, с которой я сталкиваюсь при использовании любого из методов, заключается в том, что мне нужно, чтобы потоки искателя регулярно спали до часа из-за ограничений на вызовы API. Моей первой мыслью было использовать db для сохранения начала и окончания работы. Когда пул приложений перерабатывается, я удаляю все незавершенные части и запускаю только те части, которые не были запущены в этот день. Что думают здесь эксперты? есть ли хорошие ссылки на образец архитектуры этого типа планирования?


person Buck3y3    schedule 19.06.2012    source источник
comment
Как вы думаете, вы переформатируете свой вопрос. Это немного сложно читать.   -  person Conrad Frix    schedule 20.06.2012
comment
См. Раздел Stack Overflow не позволяет использовать теги в заголовках.   -  person John Saunders    schedule 20.06.2012
comment
извините за проблемы с заголовком и изменчивый английский   -  person Buck3y3    schedule 20.06.2012


Ответы (4)


На самом деле не имеет значения, какой метод вы используете, катитесь ли вы самостоятельно или используете Quartz. Вы находитесь во власти ASP.NET/IIS, потому что именно там вы хотите его разместить.

У вас есть запасной компьютер, который может просто выполнять запланированное задание и загружать данные в размещенную базу данных? Честно говоря, возможно, безопаснее (в зависимости от вашего варианта использования) просто сделать это таким образом, а затем попытаться запустить планировщик в ASP.NET.

person Bryan Crosby    schedule 19.06.2012
comment
это несколько жизнеспособно в качестве краткосрочного решения, но я буду бороться изо всех сил против общедоступных db из-за безопасности. Думаю, мне просто нужно получить костюм, чтобы попросить больше денег и получить либо vps, либо выделенный хостинг ... - person Buck3y3; 20.06.2012
comment
@ user1146566: Было бы в ваших интересах обосновать это, если вы не хотите иметь дело с головной болью, связанной с попыткой разместить что-то подобное в ASP.NET. - person Bryan Crosby; 21.06.2012

В некотором роде поста Брайана;

Найдите запасной компьютер.

Вместо того, чтобы разрешать доступ к БД, пусть он вызовет веб-службу на вашем сайте. Этот сервисный вызов должен быть инициатором процесса, который вы пытаетесь выполнить. Не пытайтесь вводить в него параметры, просто что-то вроде "StartProcess ()" должно работать нормально.

Что касается перехода в спящий режим и его возобновления позже, обратите внимание на Workflow Foundation. . Есть несколько хороших встроенных функций для сохранения состояния.

Не открывайте свою БД внешнему миру, вместо этого откройте эту страницу или веб-службу и оберните вокруг нее некоторую безопасность. WCF имеет для этого несколько хороших встроенных функций безопасности.

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

person Jay    schedule 28.06.2012

Пока вы используете постоянное хранилище заданий (например, базу данных), и вы пишете и планируете свои задания, чтобы они могли справиться с такими вещами, как убийство на полпути, повторное использование IIS вашего процесса не так уж и важно.

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

person jvilalta    schedule 05.07.2012

Если вы не зависят от языка и не возражаете написать свой "скрипт активации задания" на вашем любимом языке, поддерживаемом Linux ...

Одно из решений, которое мне очень понравилось:

  1. Получение относительно дешевого, стабильного Linux-хостинга (от известных компаний),
  2. Создание службы WCF на вашей платформе .Net, которая будет содержать логику, которую вы хотите запускать регулярно (RESTfully, SOAP или XMLRPC ... в зависимости от того, что вам подходит),
  3. Обработка вызовов через размещенные в Linux задания cron, написанные на выбранном вами языке (я использую PHP) .

Как я уже сказал, работает очень хорошо. Нет расходов на VPS, настраивается и активируется извне. У меня есть одно центральное место, где активируются мои рабочие места, с временем безотказной работы от 99 до 100% (никогда не было сбоев).

person user919426    schedule 22.01.2015