- •Тверской государственный технический университет
- •Построение Windows сервиса.
- •1. Теоретическая часть.
- •1.1. Альтернативные хосты для удаленных объектов
- •1.2. Хостинг удаленных объектов с использованием службы Windows
- •1.3. Построение сборки удаленных объектов.
- •1.4. Разработка Windows службы
- •1.4.1. Реализация метода Main() в классе Program.
- •1.4.2. Реализация класса Windows-службы CarService.
- •1.4.2.1. Метод CarService.OnStart()
- •1.4.2.2. Метод OnStop()
- •1.4.3. Создание инсталлятора службы
- •1.6. Инсталляция службы CarService
- •1.5. Создание консольного приложения клиента.
- •1.6. Создание Windows приложения клиента
- •1.7. Хостинг удаленных объектов с использованием iis
- •2. Указания к выполнению лабораторной работы
- •2.1. Задание на лабораторную работу
- •2.2. Содержание отчета по лабораторной работе
- •Литература:
1.4.2.2. Метод OnStop()
С технической точки зрения класс CarService не требует никакой логики останова службы. В целях иллюстрации давайте отправим еще одно сообщение в EventLog, чтобы запротоколировать останов создаваемой службы Windows:
protected override void OnStop()
{
EventLog.WriteEntry("CarWinService", "CarWinService stopped",
EventLogEntryType.Information);
}
1.4.3. Создание инсталлятора службы
Прежде, чем можно будет инсталлировать службу на определенной машине, следует ввести дополнительный тип инсталлятора к текущему проекту CarWinService. В частности, любая служба Windows (написанная на .NET или Win32 API) требует нескольких записей в реестре для того, чтобы позволить операционной системе взаимодействовать с ней. Вместо того чтобы создавать эти записи вручную, можно просто добавить инсталлятор к проекту службы Windows, который корректно сконфигурирует сервис (службу) после установке его на целевой машине.
Чтобы добавить инсталлятор к проекту CarService, откройте в окне Solution Explorer редактор служб (двойным щелчком на файле CarService.cs), после этого щелкните правой клавишей мыши в любом месте дизайнера инсталлятора и выберите в контекстном меню (см. рис.2) пункт Add Installer (Добавить Инсталлятор).
В результате этих операций в проект сервиса будет добавлен новый элемент инсталлятора, унаследованного от базового класса System.Configuration.Install.Installer. В конструкторе инсталлятора будет находится два компонента. Один из них имеет тип serviceInstaller1 и представляет собой инсталлятор конкретной службы в проекте. Если курсором мыши выбрать эту пиктограмму и заглянуть в окно его свойств (Properties), то обнаружится, что свойство ServiceName было установлено в тип класса службы - CarService.
Второй компонент (serviceProcessInstaller1) позволяет установить идентичность (имя, идентификатор), под которой будет выполняться инсталлированная служба. По умолчанию свойство Account установлено в User. Используя окно Properties среды Visual Studio, измените это значение на LocalService (рис.4).
Рис. 4. Установка идентичности для CarService.
После компиляции проект службы будет готов к использованию.
1.6. Инсталляция службы CarService
Инсталляция CarService.exe на определенной машине (локальной или удаленной) требует выполнения двух шагов.
1. Перенос готовой сборки службы (и всех необходимых ей внешних сборок; в данном примере — CarGeneralAsm.dll) на удаленную машину.
2. Запуск инструмента командной строки installutil.exe с указанием службы в качестве аргумента. (Эту утилиту можно найти, например, в каталоге: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727)
Если первый шаг выполнен, откройте командное окно Visual Studio, перейдите к месту нахождения сборки CarWinService.exe и выполните следующую команду
installutil carwinservice.exe
Обратите внимание, что тот же инструмент может применяться и для деинсталляции службы, но уже с указанием аргумента /u, например, installutil /u carwinservice.exe). Проще всего это сделать, если разместить файлы CarGeneralAsm.dll, carwinservice.exe и installutil.exe в корне каталога, например, каталога d:\.
Как только служба Windows установлена, то можно запускать и конфигурировать ее в аплете Services (Службы) панели управления. Найдя CarService (рис.5), щелкните на ссылке Start (Запуск) для загрузки и запуска программы службы.
Рис.5. Аплет Services
То же самое можно сделать из среды Visual Studio в меню "Вид" выбрать пункт "Обозреватель серверов", в котором открыть папку "Серверы", а внутри нее – "Службы". Если установка службы прошла успешно, то в папке служб вы найдете свою службу "CarService " (рис.5). Если подвести курсор к папке "Службы" и нажать на правую клавишу мыши, то появиться то же самое окно для загрузки и запуска служб, показанное на рис.5.
Рис.5. Окно Visual Studio для просмотра служб, установленных на вашем компьютере.
В результате запуска сервиса CarService мы получаем службу, которая способна выполнять роль полноправного заменителя сервера удаленного объекта, не требующего запуска самого сервера в виде отдельного приложения (хоста).