Поделиться через


Узел службы Windows

В примере WindowsService показана служба Windows Communication Foundation (WCF), размещенная в управляемой службе Windows. Службы Windows управляются с помощью applet Services в панели управления и могут быть настроены для автоматического запуска после перезагрузки системы. Пример состоит из клиентской программы и программы службы Windows. Служба реализуется как программа .exe и содержит собственный хостинг-код. В других средах размещения, таких как службы активации процессов Windows (WAS) или Интернет-информационные службы (IIS), нет необходимости самостоятельно писать код для размещения.

Замечание

Инструкции по настройке и сборке этого примера находятся в конце этого раздела.

После создания этой службы она должна быть установлена с помощью программы Installutil.exe, как и любая другая служба Windows. Если вы собираетесь внести изменения в службу, необходимо сначала удалить ее с помощью installutil /u. Файлы Setup.bat и Cleanup.bat, включенные в этот пример, являются командами для установки и запуска службы Windows, а также для завершения работы и удаления службы Windows. Служба WCF может реагировать только на клиентов, если служба Windows запущена. Если вы остановите службу Windows с помощью applet Services из панели управления и запустите клиент, EndpointNotFoundException исключение возникает при попытке клиента получить доступ к службе. При перезапуске службы Windows и повторном запуске клиента обмен данными завершается успешно.

Код службы включает класс установщика, класс реализации службы WCF, реализующий контракт ICalculator, и класс службы Windows, который выступает в качестве узла среды выполнения. Класс установки, который наследует от Installer, позволяет установить программу как службу NT с помощью инструмента Installutil.exe. Класс WcfCalculatorServiceреализации службы — это служба WCF, реализующая базовый контракт службы. Эта служба WCF размещается внутри класса WindowsCalculatorServiceслужбы Windows. Чтобы квалифицироваться как служба Windows, класс наследует от ServiceBase и реализует методы OnStart(String[]) и OnStop(). Внутри OnStart(String[]) создается объект ServiceHost для типа WcfCalculatorService, и он открывается. В OnStop() объект ServiceHost закрывается вызовом метода Close(TimeSpan) объекта ServiceHost. Базовый адрес узла настраивается с помощью элемента <add>, который является дочерним элементом <baseAddresses>, а он, в свою очередь, является дочерним элементом <узла>, находящегося внутри <элемента службы>.

Определяемая конечная точка использует базовый адрес и <wsHttpBinding>. В следующем примере показана конфигурация базового адреса, а также конечная точка, которая предоставляет службу Калькулятора.

<services>
  <service name="Microsoft.ServiceModel.Samples.WcfCalculatorService"
           behaviorConfiguration="CalculatorServiceBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/ServiceModelSamples/service"/>
      </baseAddresses>
    </host>
    <!-- This endpoint is exposed at the base address provided by host: http://localhost:8000/ServiceModelSamples/service.  -->
    <endpoint address=""
              binding="wsHttpBinding"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
    ...
  </service>
</services>

При запуске примера запросы и ответы операции отображаются как в окнах службы, так и в консоли клиента. Нажмите клавишу ВВОД в каждом окне консоли, чтобы завершить работу службы и клиента.

Настройка, сборка и запуск примера

  1. Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.

  2. Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .

  3. После создания решения запустите Setup.bat из командной строки Visual Studio с повышенными привилегиями, чтобы установить службу Windows с помощью средства Installutil.exe. Служба должна появиться в Службах.

  4. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".

См. также