Лучший способ, позволяющий asp.net автоматически запускать события и методы - согласно расписанию. - PullRequest
1 голос
/ 20 декабря 2010

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

Но я никогда не видел полного ответа на этот вопрос, я имею в виду, что никто не говорил о преимуществах и недостатках.никто не поделился реальным опытом.

Хотя Quartz.NET кажется хорошим решением, но пока нет достаточного количества обзоров или хорошего сравнения между различными способами достижения такой цели.

Насколько я читал об этом, я обнаружил, что возможны следующие способы сделать это:

Использование: веб-службы, приложения Windows, консольного приложения, Quartz.NET.

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

Я надеюсь, что вы поделитесь своим опытом с одним из этих подходов или поделитесь новым способом сделать это.

Ответы [ 4 ]

1 голос
/ 21 декабря 2010

На веб-сайте электронной коммерции, на котором я работаю, мы используем Quartz.NET в службе Windows, называемой «Рабочий».Он выполняет реализации Quartz.NET IJob по программно определенному расписанию и работает независимо от процессов веб-сайта.Он выполняет такие функции, как рассылка электронных писем в пакетном режиме, обновление статистики, обновление индексов SOLR и т. Д.

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

Веб-сайт и Worker совместно используют общую библиотеку DLL модели, котораясодержит объектную модель и конфигурацию NHibernate, поэтому в ней не так много логического дублирования бизнес-логики.

До создания службы Worker / Windows я опирался на простые консольные приложения, которые выполнялись с помощью запланированных задач.До определенного момента это работало хорошо, но, поскольку сайт становился все более сложным и требовал периодического запуска все большего числа пакетных заданий, я обнаружил, что поддерживаю множество независимых консольных программ и множество независимых запланированных задач, которые становились все более трудными, посколькуколичество рабочих мест увеличилось.Консолидируя планирование с Quartz.NET в единую службу Windows, я теперь могу следить только за одним процессом и могу быть уверен, что любые изменения бизнес-логики «синхронизированы», поскольку модель должна обновляться только в двух местах:- рабочий и веб-сайт - вместо многих - веб-сайт и множество небольших консольных приложений.

Я исследовал такие варианты, как хранение сред выполнения в кэше ASP.NET или хранение ссылок в рабочем процессе.памяти, но я обнаружил, что (1) это сделало точное время выполнения задачи зависимым от входящих запросов на веб-сайт и (2) использование веб-сада вызвало ненужное дублирование усилий (поскольку задача была бы «запланирована»в нескольких рабочих процессах на одной машине).

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

Как веб-сайт, так и Worker используют WiX для компиляции до двух MSI-файлов установщика Windows, поэтому их обновление очень просто - достаточно дважды щелкнуть MSI на сервере, и наше обновление готово.

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

1 голос
/ 21 декабря 2010

Очевидная проблема заключается в том, что веб-приложение предназначено в качестве службы запроса-ответа. Таким образом, хотя, вероятно, взломанный (и, несомненно, люди), вам нужно будет ответить на запрос, чтобы запустить какую-то задачу обработки. Я знаю, что вам нужно решение для веб-форм, но я бы предположил, что этот тип проблемной области не лучше всего решать с веб-платформой.

В качестве предложения, хотя, возможно, не то, которое вы хотели услышать, вы, конечно, могли бы использовать решение Windows Service и все хорошее, что есть с этой платформой (фоновые таймеры, обработка MSMQ, многопоточность, более простая интеграция безопасности и т. Д.) и получить информацию через веб-приложение (подключенное через WCF).

0 голосов
/ 21 декабря 2010

Я видел, как этот вопрос задавался, по крайней мере, 100 способами. По моему опыту, лучший способ составить расписание - начать с хорошо продуманного n-уровневого дизайна. Это позволяет вам гибко менять внешние интерфейсы по мере необходимости. Например, консольное приложение для вызова метода Method1 (), который обрабатывается планировщиком задач Windows. Я настоятельно рекомендую вам придерживаться планировщика задач Windows, если требования не заставляют вас поступать иначе.

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

Что касается приложения Windows, я никогда не использовал его для запланированной задачи (за исключением компиляции консольного приложения как приложения winform, поэтому окно консоли не отображается). Так как он отображает ненужный пользовательский интерфейс, сбивает с толку пользователя.

На стороне БД у вас есть новые опции, такие как задания и триггеры.

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

0 голосов
/ 21 декабря 2010

Проверьте следующий вопрос, который задавал нечто подобное:

https://stackoverflow.com/questions/3243400/how-to-do-background-processing-similar-to-that-on-stackoverflow/

Я связался с сообщением в блоге самого Джеффа Этвуда , у которого был уникальный подход для достижения этой цели:

http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

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

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