Служби Windows є такі додатки, які можуть автоматично запускатися при завантаженні операційної системи. Вони можуть функціонувати і без здійснення користувачем інтерактивного входу в систему і виробляти в фоновому режимі якісь операції з обробки.
Наприклад, на сервері Windows Server мережеві служби системи дозволяють клієнтам отримувати до них доступ без проходження користувачем процедури реєстрації на сервері, а в клієнтських системах служби дозволяють завантажувати нову версію програмного забезпечення з Інтернету або виконувати очистку файлів на локальному диску.
Простий компонент TCP / IP Services (Служби TCP / IP)
Являє собою службову програму, яка обслуговує невеликі сервери TCP / IP: відображення (echo), дата і час (daytime), цитати (quote) і т.п.
Компонент World Wide Publishing Service (Служба WWW)
Являє собою одну із служб інформаційного сервера Інтернету (Internet Information Server - IIS).
Компонент Event Log (Журнал подій)
Являє собою службу для реєстрації повідомлень в системі реєстрації подій.
Компонент Windows Search (Пошук Windows)
Являє собою службу, яка створює індекси даних на диску.
Для оперування службою Windows необхідні три програми наступного типу:
програма для управління службою;
програма для конфігурації служби.
Програма служби надає дійсну функціональність. Програма для управління службою дозволяє відправляти службу запити, що стосуються управління, наприклад, запити на запуск, зупинка, припинення і відновлення її роботи.
Про кожного з цих трьох складових служби Windows більш докладно розповідається в наступних підрозділах.
програма служби
Перш ніж розглядати реалізацію служб в .NET, давайте в загальному подивимося, як виглядає архітектура служб Windows і їх внутрішня функціональність.
За реалізацію функціональних можливостей відповідає програма служби. Вона повинна складатися з трьох частин:
головна службова функція;
Для початку слід ознайомитися з диспетчером управління службами - Service Control Manager (SCM). Цей диспетчер грає важливу роль для служб. Саме він відправляє службам запити на виконання запуску або зупинки.
Диспетчер управління службами
Диспетчер управління службами (Service Control Manager - SCM) являє собою частину операційної системи, яка взаємодіє зі службами. На малюнку це взаємодія показано на діаграмі послідовностей:
Під час завантаження системи запускається кожен процес, для якого налаштований автоматичний запуск служби, і викликається його головна функція. Служба відповідає за реєстрацію головних службових функцій для всіх своїх складових. Головна функція служить точкою входу в програму служби і в ній за допомогою SCM повинні реєструватися точки входу для всіх її головних службових функцій.
Головна функція, головна службова функція і обробники
Головна функція служби являє собою звичайну точку входу в програму, тобто метод Main (). У ній може реєструватися більше однієї головної службової функції. У головній службової функції міститься сама функціональність служби. Службова програма повинна реєструвати головну службову функцію для кожної з наданих нею служб. Одна службова програма може надавати безліч служб; наприклад,
Далі диспетчер SCM викликає головні службові функції кожної з підлягають запуску служб. Однією з найважливіших завдань головною службової функції є реєстрація обробника в SCM.
Функція-обробник являє собою третю частину службової програми. Вона повинна обов'язково вміти відповідати на події SCM. Робота служб може зупинятися, припинятися і відновлюватися, і обробник повинен обов'язково бути здатний реагувати на всі такі події.
Після реєстрації обробника в SCM програма для управління службою може починати надсилати SCM запити на завершення, припинення і відновлення роботи служби. Ця програма не залежить ні від SCM, ні від самої служби. В операційній системі поставляється безліч подібних програм; однією з них є, наприклад, оснащення Services (Служби) консолі ММС, згадана раніше. Можна також писати власні програми для управління службами; хороший приклад - додаток SQL Server Configuration Manager (Диспетчер настройки сервера SQL).
Програма для управління службою
Програма для управління службою, як не важко здогадатися з її назвою, дозволяє управляти службою. Для завершення, припинення і відновлення роботи служби їй можуть надсилатися відповідні керуючі коди, і обробник повинен на них реагувати. Можна також запитувати поточний стан служби і реалізувати спеціальний код обробки, здатний реагувати на спеціальні керуючі коди.
Програма для конфігурації служби
Через те, що служби повинні налаштовуватися відповідним чином в системному реєстрі, застосовувати для їх установки команду хсору не можна. У системному реєстрі міститься параметр, який відповідає за те, як повинна запускатися служба. Він може бути налаштований так, щоб служба запускалася автоматично або вручну або взагалі була відключена. Також необхідно налаштовувати користувача службової програми і залежно служби, наприклад, інші служби, які повинні запускатися перед запуском цієї.
Всі ці настройки проводяться в програмі для конфігурації служби. Ця програма може використовуватися як в програмі установки для початкового налаштування служби, так і пізніше для зміни її конфігураційних параметрів.
Класи, за допомогою яких можна реалізувати три описаних складових служби, перебувають у просторі імен System.ServiceProcess.
Є головним класом, від якого має здійснюватися спадкування для реалізації служби. Цей клас застосовується для реєстрації служби і відповіді на запити, що стосуються її запуску і зупинки.
Дозволяє реалізувати програму для управління службою. За допомогою цього класу можна відправляти службам запити.
Класи ServiceProcessInstaller і ServiceInstaller
Як не важко здогадатися по їх іменах, дозволяють встановлювати і конфігурувати програми служб.
Тепер можна переходити до розгляду процесу створення нової служби.