Фоновые темы ASP.NET - PullRequest
       20

Фоновые темы ASP.NET

4 голосов
/ 08 июня 2011

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

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

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

  1. Получите заказ через веб-сервис.
  2. Создайте фоновый поток
  3. Верните постоянный ответ клиенту
  4. Затем фоновый поток спит в течение 5 - 30секунд, отправляет уведомление, снова спит, отправляет уведомление, повторяя, возможно, три-четыре раза, а затем, наконец, завершается, когда нечего делать

Поток спит 5 - 30 секунд предназначен дляИмитировать долгие часы и дни задержки производственной системы.Каждый фоновый поток будет жить не более трех минут.

В настоящее время дизайн, кажется, хорошо работает для своей цели.Пока единственная проблема, с которой сталкиваются при таком подходе, состоит в том, что если что-то происходит, что вызывает перезапуск приложения (изменение web.config, развертывание новых библиотек DLL, перезапуск IIS и т. Д.), Фоновые потоки, по-видимому, удаляются и все ожидающие уведомления дляфоновые потоки никогда не происходят.

Заказчик решил, что задержки на 5 - 30 секунд слишком малы, и что более подходящей является задержка в 5 минут между уведомлениями.Это будет означать, что время жизни фонового потока может составлять более 20 минут.

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

Насколько надежным будет этот дизайн с увеличенными задержками?Кто-нибудь имел опыт работы с долго работающими фоновыми потоками в ASP.NET, который мог бы прокомментировать это?

Ответы [ 3 ]

3 голосов
/ 08 июня 2011

«Спать», как это никогда не должно быть сделано, как это было сделано в этом приложении;Вы уже видели, почему это так.Увеличение этой задержки будет экспоненциально увеличивать время, когда задача не будет выполнена, так как чем дольше период времени, тем больше вероятность повторного использования пула приложений.

Возможно, стоит создать отдельную службу Windows, котораявеб-сайт / служба может подключаться и запускать эти длительные задачи.Служба Windows не будет автоматически перезагружаться, как служба ASP.NET.Вы можете использовать WCF для облегчения связи между ASP.NET и службой Win.

1 голос
/ 08 июня 2011

, если вы можете использовать MSMQ для хранения заказов, а затем запустить поток для обработки очереди, будет хорошей идеей. Это обеспечит большую надежность в случае обновления / перезапуска сервера IIS.

1 голос
/ 08 июня 2011

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

По сути, вам нужен спулер или очередь. Это часто происходит в форме отдельной службы или запланированной задачи, которая выполняется. В мире Linux вы бы назвали эти задания демонов или cron.

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

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

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