Размещение в приложении службы 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.
Практическое руководство
Создайте приложение службы Windows. Приложения служб Windows можно создавать в управляемом коде, используя классы в пространстве имен System.ServiceProcess. Это приложение должно включать один класс, наследуемый от ServiceBase.
Свяжите время существования служб WCF со временем существования приложения службы Windows. Как правило, необходимо, чтобы службы WCF, размещенные в приложении службы Windows, стали активными при запуске службы размещения, остановите прослушивание сообщений при остановке службы размещения и завершите процесс размещения, когда служба WCF сталкивается с ошибкой. Это можно обеспечить, выполнив следующие действия.
Переопределите OnStart(String[]), чтобы открыть один или несколько экземпляров ServiceHost. Одно приложение службы Windows может размещать несколько служб WCF, которые запускаются и останавливаются как группа.
Переопределите OnStop вызов ClosedServiceHost всех запущенных служб WCF, которые были запущены во время OnStart(String[]).
Подпишитесь на событие Faulted приложения ServiceHost и используйте класс ServiceController, чтобы завершить работу приложения службы Windows в случае ошибки.
Приложения службы Windows, на которых размещаются службы WCF, развертываются и управляются таким же образом, как и приложения службы Windows, которые не используют WCF.