Размещение в приложении службы Windows

Службы Windows (ранее называвшиеся службами Windows NT) обеспечивают модель процессов, особенно подходящую для приложений, которые должны существовать в длительно исполняемом файле и не отображают никакой формы пользовательского интерфейса. Временем существования процессов приложений служб Windows управляет диспетчер служб, который позволяет запускать, останавливать и приостанавливать приложения служб Windows. Вы можете настроить процесс службы Windows для автоматического запуска компьютера, что делает его подходящей средой размещения для приложений always on. Дополнительные сведения о приложениях службы Windows см. в разделе "Приложения службы Windows".

Приложения, на которых размещаются длительные службы Windows Communication Foundation (WCF), имеют множество характеристик со службами Windows. В частности, службы WCF являются длительными исполняемыми файлами сервера, которые не взаимодействуют напрямую с пользователем и поэтому не реализуют какую-либо форму пользовательского интерфейса. Таким образом, размещение служб WCF в приложении службы Windows является одним из вариантов создания надежных, длительных приложений WCF.

Часто разработчики WCF должны решить, следует ли размещать свое приложение WCF в приложении службы Windows или в среде размещения службы IIS (IIS) или службы активации процессов Windows (WAS). Рассмотреть возможность использования приложений служб Windows необходимо в следующих случаях.

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

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

  • Служба WCF должна работать в Windows Server 2003 и использовать транспорты, отличные от HTTP. В Windows Server 2003 среда размещения IIS 6.0 ограничена только http-коммуникацией. Приложения службы Windows не применяются к этому ограничению и могут использовать любые поддерживаемые службы ТРАНСПОРТА WCF, включая net.tcp, net.pipe и net.msmq.

Практическое руководство

  1. Создайте приложение службы Windows. Приложения служб Windows можно создавать в управляемом коде, используя классы в пространстве имен System.ServiceProcess. Это приложение должно включать один класс, наследуемый от ServiceBase.

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

    • Переопределите OnStart(String[]), чтобы открыть один или несколько экземпляров ServiceHost. Одно приложение службы Windows может размещать несколько служб WCF, которые запускаются и останавливаются как группа.

    • Переопределите OnStop вызов ClosedServiceHost всех запущенных служб WCF, которые были запущены во время OnStart(String[]).

    • Подпишитесь на событие Faulted приложения ServiceHost и используйте класс ServiceController, чтобы завершить работу приложения службы Windows в случае ошибки.

    Приложения службы Windows, на которых размещаются службы WCF, развертываются и управляются таким же образом, как и приложения службы Windows, которые не используют WCF.

См. также