Разработка библиотеки WCF-службы проводится здесь: Основы разработки WCF-служб. Часть 3. Разработка простой WCF-службы. А разработка клиентского приложения для нее проводится здесь: Основы разработки WCF-служб. Часть 4. Клиент для службы.
Задача: Разместить WCF-службу в отдельной Windows-службе.
Работа службы в качестве отдельного приложения – не самый лучший вариант. В первую очередь из-за совсем ненужной интерактивности для взаимодействия с пользователем. Системная служба Windows же может автоматически запускаться и перезапускаться, реагировать на ошибки и выполняться вне зависимости от пользователя.
Внимание! Для выполнения этой работы необходимы привилегии локального администратора системы.
1. Разработка службы
Создайте новое приложение "Служба Windows" (также, как и консольное, только выбрать надо "Служба Windows") и назовите его, например, "e_servicewindows". Среда разработки создаст все необходимые файлы.
В "Обозревателе решений" щелкните по "Service1.cs". Ниже "Обозревателя" откроется окно "Свойства", где можно изменить некоторые свойства поведения службы. В полях "Name" и "ServiceName" измените запись с "Service1", например, на "BookService".
Щелкните правой кнопкой свободной области в центре экрана (вкладка "Service1.cs [Конструктор]") и выберите "Добавить установщик". На свободной области появится два поля: "serviceProcessInstaller1" и "serviceInstaller1".
Выделите "serviceProcessInstaller1" и в окне "Свойства" в поле "Account" смените "User" на "LocalSystem". Таким образом вы измените режим входа службы в систему на "С системной учетной записью". Выделите "serviceInstaller1" и в поле "ServiceName" введите "BookService". Это позволит службе установиться в Windows с таким именем.
Далее добавьте ссылки на службу "b_FirstService" и пространство имен "System.ServiceModel", так же, как и в предыдущей статье: Основы разработки WCF-служб. Часть 5. Размещение службы в отдельном процессе.
Щелкните правой кнопкой на "Service1.cs" и выберите "Перейти к коду". Откроется код службы, в котором уже предусмотрены обработчики событий запуска и остановки службы. Подключите оба пространства имен через "using".
После объявления класса, перед функцией public BookService() пропишите ту же строку инициализации "ServiceHost", что и в прошлой работе:
1 2 | ServiceHost host = new ServiceHost(typeof(b_FirstService.WorkBook), new Uri("http://localhost:8731/Design_Time_Addresses/b_FirstService/Service1/")); |
Теперь необходимо отреагировать на событие "Старт" службы. Для этого в функции "protected override void OnStart(string[] args)" необходимо прописать инициализацию конечной точки и открыть "ServiceHost":
1 2 | host.AddServiceEndpoint(typeof(b_FirstService.IWorkBook), new WSHttpBinding(), ""); host.Open(); |
При событии "Стоп" необходимо закрыть хост. То есть в функции "protected override void OnStop()" запишите:
1 | host.Close(); |
Должен получиться примерно такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.ServiceModel; using b_FirstService; namespace e_servicewindows { public partial class BookService : ServiceBase { ServiceHost host = new ServiceHost(typeof(b_FirstService.WorkBook),new Uri("http://localhost:8731/Design_Time_Addresses/b_FirstService/Service1/")); public BookService() { InitializeComponent(); } protected override void OnStart(string[] args) { host.AddServiceEndpoint(typeof(b_FirstService.IWorkBook), new WSHttpBinding(), ""); host.Open(); } protected override void OnStop() { host.Close(); } } } |
Таким образом, при запуске Windows-службы будет создан экземпляр WCF-службы, которая начнет принимать подключение. При остановке службы, WCF -служба так же остановится.
2. Установка и запуск службы
Теперь службу необходимо установить. С помощью утилиты "InstallUtil.exe", которая входит в поставку Microsoft.NET, – это простая задача.
Запустите командную строку Visual Studio. Эта программа находиться в папке Microsoft Visual Studio (меню "Пуск") в подпапке Visual Studio Tools.
Пропишите в командной строке:
1 | Installutil [путь_до_службы] |
И нажмите
Если установка пройдет успешно, то последние строчки выведенного текста будут приблизительно таковы: "The Commit phase completed successfully. The transacted install has completed."
Откройте оснастку администрирования служб. "Панель управления" : "Администрирование" : "Службы". В списке служб должна появиться "BookService".
Запустите службу. Запустите клиента из статьи: Основы разработки WCF-служб. Часть 4. Клиент для службы. Убедитесь, что клиент работает со службой.
После окончания работы не забудьте удалить службу. Это можно сделать, например, через командную строку:
1 | sc delete BookService |
В следующей статье рассматривается рассматривается добавление нескольких конечных точек для службы: Основы разработки WCF-служб. Часть 7. Добавление нескольких конечных точек службы.