Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

 case CommandRefresh:

quoteServer.RefreshQuotes;

break;

 default:

break;

 }

}

Как и раньше, необходимо добавить ссылку на файл

QuoteServer.dll
.

Потоки выполнения и службы

При использовании служб мы имеем дело с потоками выполнения. Как мы говорили ранее, SCM предполагает, что служба отказала, если инициализация продолжается слишком долго. Чтобы справиться с этим, необходимо создать поток выполнения. Метод

OnStart
в служебном классе должен вернуть управление вовремя. Для вызова заблокированного метода, такого как
AcceptSocket
из класса
TopListener
, необходимо запустить поток выполнения. Если мы не находимся внутри
AcceptSocket
, то следующий клиент, запрашивающий службу, должен ожидать, пока мы там не окажемся. Это означает, что если для клиента нужно сделать некоторую работу, то используется пул потоков выполнения.

Установка службы

Служба должна конфигурироваться в реестре. Все службы можно найти в

HKEY_LOCAL_MACHINE\System\CurrentControlSetServices
. Записи реестра можно увидеть с помощью
regedit
. Там находятся тип службы, выводимое имя, путь доступа к исполняемому файлу, конфигурация запуска и т.д.

Эту конфигурацию можно сделать с помощью классов установки из пространства имен

System.ServiceProcess
.

Программы установки

Можно добавить программу установки в службу, переключаясь в представление конструктора в Visual Studio.NET и выбирая параметр Add Installer из контекстного меню. С помощью этого параметра создается новый класс

ProjectInstaller
и экземпляры
ServiceProcessInstaller
и
ServiceInstaller
:

Диаграмма классов установки для служб должна помочь пониманию созданного мастером кода:

< image l:href="#"/>

Помня об этой диаграмме, пройдем через исходный код в файле

ProjectInstaller.cs
, созданный с помощью параметра Add Installer.

Класс Installer

Класс

ProjectInstaller
выводится из класса
System.Configuration.Install.Installer
. Класс
Installer
является базовым классом для всех специальных классов установки. С его помощью создается установка на основе транзакций, при которой можно вернуться в предыдущее состояние, если установка отказывает. При откате все изменения, сделанные при установке, будут отменены. Как можно видеть на диаграмме, класс
Installer
имеет методы
Install
,
Commit
,
Rollback
и
Uninstall
, вызываемые из программ установки.

Атрибут

RunInstaller(true)
означает, что при установке сборки должен вызываться класс
ProjectInstaller
. Специальные программы установки действий, а также утилита
installutil.exe
(которая будет использоваться позднее) проверяют атрибут:

using System;

using System.Collections;

using System.ComponentModel;

using System.Configuration.Install;

namespace Wrox.ProfessionalCSharp {

 /// <summary>

 /// Краткое описание ProjectInstaller

 /// </summary>

 [RunInstaller(true)]

 public class ProjectInstaller : System.Configuration.Install.Installer {

Классы ServiceProcessInstaller и ServiceInstaller

Аналогично приложениям Windows Forms метод

InitializeComponent
вызывается внутри конструктора класса
ProjectInstaller
. В методе
InitializeComponent
создается экземпляр класса
ServiceProcessInstaller
и класса
ServiceInstaller
. Оба эти класса выводятся из класса
ComponentInstaller
, который сам является
Installer
.

Классы, производные из

ComponentInstaller
, используются как части процесса установки. Помните, что служебный процесс может включать более одной службы. Класс
ServiceProcessInstaller
применяется для части процесса установки, а класс
ServiceInstaller
для части службы, поэтому один экземпляр
ServiceInstaller
требуется для каждой службы. Если в процессе имеется три службы, то необходимо добавить дополнительные объекты
ServiceInstaller
, в таком случае понадобятся три экземпляра
ServiceInstaller
.

private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;

private System.ServiceProcess.ServiceInstaller serviceInstaller1;

/// <summary>

/// требуемые переменные конструктора.

/// </summary>

private System.ComponentModel.Container components;

public ProjectInstaller {

// Этот вызов затребован конструктором.

  • Читать дальше
  • 1
  • ...
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: