Разработка Windows службы

Прежде чем двигаться дальше, необходимо убедиться, что в проекте сборки сервиса установлены ссылки на сборки сборку удаленных объектов CarGeneralAsm.dll и System.Remoting.dll и специфицированы следующие дополнительные директивы using в файле Service1.cs, содержащем определение класса CarService:

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels.Http;

using System.Runtime.Remoting.Channels;

using System.ServiceProcess;

using System.Diagnostics;

1.4.1. Реализация метода Main () в классе Program.

Метод Main () класса Program отвечает за запуск каждой службы, определенной в проекте, посредством передачи массива объектов типа ServiceBase в статический метод Service.Run (). Учитывая переименование специальной службы с Service1 на CarService, вы должны получить следующее определение класса Program:

using System.ServiceProcess;

static class Program

{

static void Main()

{

ServiceBase[] ServicesToRun;

ServicesToRun = new ServiceBase[] { new CarService() };

ServiceBase.Run(ServicesToRun);

}

}

1.4.2. Реализация класса Windows-службы CarService.

Класс службы, созданный Visual Studio по умолчанию содержит всего три метода: конструктор по умолчанию, метод OnStart и метод OnStop и имеет следующий вид:

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels.Http;

using System.Runtime.Remoting.Channels.Тcp;

using System.Runtime.Remoting.Channels;

using System.ServiceProcess;

using System.Diagnostics;

namespace CarWinService

{

public partial class CarService: ServiceBase

{

public CarService() { InitializeComponent(); }

protected override void OnStart(string[] args) { }

protected override void OnStop() { }

}

}

1.4.2.1. Метод CarService.OnStart ()

Вероятно, вы уже представяете, какого рода логика должна выполняться при запуске специальной службы на заданной машине. Напомним, что роль службы CarService состоит в выполнении тех же задач, которые выполняли и разработанные в предыдущей работе приложения сервера (хоста), владеющие удаленным объектом. Поэтому, если вы хотите зарегистрировать службу CarService как службу, владеющую одиночным объектом WKO -типа, доступного через http -канал, то можете добавить следующий код в метод OnStart ():

protected override void OnStart(string[] args)

{

// Создать новый HttpChannel.

HttpChannel c = new HttpChannel(32469);

ChannelServices.RegisterChannel(c);

// Зарегистрировать WKO одиночного вызова.

RemotingConfiguration.RegisterWellKnownServiceType(

typeof(CarGeneralAsm.CarProvider),

"CarProvider.soap",

WellKnownObjectMode.SingleCall);

// Протоколировать успешный запуск.

EventLog.WriteEntry("CarWinService", "CarWinService started successfully!",

EventLogEntryType.Information);

}

Обратите внимание на то, что, как только тип зарегистрирован, то в журнал событий Windows, будет записано специальное сообщение (через объект типа System.Diagnostics.EventLog) для документирования успешного запуска службы на машине-хосте.

Примечание. Как и следовало надеяться, тип RemotingConfiguration можно применять для загрузки конфигурационного файла *.config серверной стороны вместо того, чтобы жестко кодировать реализацию при развертывании удаленных объектов с использованием службы Windows.

1.4.2.2. Метод OnStop ()

С технической точки зрения класс CarService не требует никакой логики останова службы. В целях иллюстрации давайте отправим еще одно сообщение в EventLog, чтобы запротоколировать останов создаваемой службы Windows:

protected override void OnStop()

{

EventLog.WriteEntry("CarWinService", "CarWinService stopped",

EventLogEntryType.Information);

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: