Должен ли я использовать службу Windows или фоновый поток ASP.NET? - PullRequest
5 голосов
/ 13 июня 2009

Я пишу веб-приложение в ASP.NET 3.5, которое заботится о некоторых основных сценариях ввода данных. В приложении также есть компонент, который должен постоянно опрашивать некоторые данные и выполнять действия на основе бизнес-логики.

Как лучше всего реализовать компонент «опрос»? Он должен запускаться и проверять данные каждые пару минут или около того.

В прошлом я видел несколько разных вариантов:

  1. Веб-приложение запускает фоновый поток, который всегда будет работать, пока веб-приложение работает. (Реализация, которую я видел, запустила поток в событии Application_Start.)
  2. Создать службу Windows, которая всегда работает

Каковы преимущества любого из этих вариантов? Есть ли дополнительные опции?

Я склоняюсь к службе Windows, потому что она разделена и может работать на другом сервере (более масштабируемом), а также больше контроля над ее запуском / остановкой и т. Д. Однако я чувствую, как компактность «фоновая» логика, выполняемая в процессе веб-приложения, может сделать все решение более понятным.

Ответы [ 4 ]

6 голосов
/ 13 июня 2009

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

  • При необходимости вы можете запустить его на другом сервере.
  • Вы можете запускать и останавливать его независимо от веб-сайта.

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

Модное слово здесь - «разделение интересов». Веб-сайт занимается представлением данных пользователю, службой проверки целостности данных.

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

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

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

2 голосов
/ 13 июня 2009

Почему бы просто не использовать консольное приложение без пользовательского интерфейса? Может делать все то, что служба Windows может и гораздо легче отлаживать и поддерживать. Я бы не стал обслуживать Windows, если бы вам не пришлось это делать.

1 голос
/ 04 августа 2009

Может оказаться, что планировщика заданий SQL Server достаточно для того, что вы хотите.

0 голосов
/ 04 августа 2009

Консольное приложение не очень хорошо в этом случае. Я написал приложение TAPI, которое должно оставаться в фоновом режиме и перехватывать входящие звонки. Но он сделал это только один раз, потому что тапи-менеджер получил GCed и никогда не был доступен для второго входящего вызова.

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