Сервис .NET для мониторинга изменений веб-страниц - PullRequest
0 голосов
/ 26 сентября 2011

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

  1. Создать службу Windows для каждой отслеживаемой страницы
  2. Создайте службу Windows, которая порождает поток для каждой страницы для мониторинга

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

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

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

Затем я могу получить все записи, которые я хочу запустить, выбрав те, которые имеют lastRun + interval

Если ваш наименьший интервал находится в диапазоне секунд, вы, вероятно, захотите использовать ThreadPool, чтобы вы могли выполнить несколько запросов одновременно. (Не забудьте соответствующим образом настроить параметр maxConnections в файле app.config).

Я бы использовал одну службу Windows (для этого взгляните на проект TopShelf), и тогда бы Quartz.Net запускал задания. С помощью Quartz вы можете контролировать необходимость завершения предыдущих заданий и т. Д.

1 голос
/ 26 сентября 2011

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

Я бы рекомендовал использовать подход с использованием пула потоков и / или System.Threading.Timer в сочетании с ConcurrentDictionary или ConcurrentQueue.

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