Мысли о запуске приложений типа службы Windows на ASP .NET 4 с StartMode = «AlwaysRunning»

Обычно я смотрю на создание службы Windows для управления задачами, которые не подходят для размещения в веб-приложении. Эти типы задач обычно представляют собой длительные процессы или запланированные задачи. Хотя обычно это основной подход для задач такого типа, люди изучали способы запуска таких фоновых процессов в веб-приложении, запустив несколько потоков в событии Application_Start, предоставляемом Global. asax. Проблема с этим подходом всегда заключалась в том, что если ваш рабочий процесс IIS умирает, то ваш фоновый поток также прекращается (фактически ваша «служба Windows» останавливается до тех пор, пока не будет получен следующий запрос).

ASP .NET 4.0 предлагает решение этой проблемы.Теперь вы можете установить StartMode на «AlwaysRunning», как описано в сообщении в блоге Скотта Гу. Где-то в комментариях к этому сообщению кто-то задает вопрос о жизнеспособности размещения задач типа службы Windows в IIS, поскольку новая функция гарантирует, что рабочий процесс всегда выполняется. Скотт упомянул, что это определенно поддержит сценарий. В дополнение к этому недавнее введение AppFabric означает, что сама Microsoft предоставляет простые средства для размещения и мониторинга служб WCF и WF в веб-приложении.

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

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

  1. Безопасность . Может быть другая модель безопасности для пользовательского интерфейса, отображающего информацию о запущенных фоновых процессах. Я бы не хотел открывать этот интерфейс никому, кроме команды разработчиков.Кроме того, веб-приложение может запускаться от имени другого пользователя с повышенным набором разрешений.
  2. Техническое обслуживание . Было бы здорово иметь возможность вносить изменения в приложение, в котором размещаются фоновые процессы, не влияя на использование пользователем внешнего веб-сайта.
  3. Производительность . Отделение приложения от основного сайта, обрабатывающего запросы пользователей, означает, что фоновые потоки не уменьшат возможности IIS по обработке очереди входящих запросов. Кроме того, при необходимости приложение, обрабатывающее фоновые задачи, может быть развернуто на отдельном сервере.

Мне было бы действительно интересно услышать ваше мнение об этом подходе и о том, следует ли мне придерживаться служб Windows. Мне очень хочется попробовать этот новый подход.

17
задан Rohland 14 September 2010 в 17:12
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: