/// <summary> /// Остановка сервиса /// </summary> protected override void OnStop() { try { if (_devmanHost != null) { // останавливаем диспетчер _devmanHost.Dispose(); _devmanHost = null; } _eventLink.Post(DeviceManager.EventSource, serviceStopped); } catch (Exception e) { _eventLink.Post(DeviceManager.EventSource, "Остановка сервиса", e); } // закрываем журнал событий _eventLink.Dispose(); }
/// <summary> /// Запуск сервиса /// </summary> /// <param name="args">Параметры командной строки</param> protected override void OnStart(string[] args) { // создаем журнал событий _eventLink = new EventLink(DeviceManager.GetDeviceManagerLogDirectory()); try { // версия сервиса _eventLink.Post(DeviceManager.EventSource, string.Format(serviceHello, VersionInfoHelper.GetVersion(Assembly.GetExecutingAssembly()))); // создаем и публикуем диспетчер _devmanHost = new TcpBinaryHost <DeviceManager>(new DeviceManager(_eventLink)); _devmanHost.EventLink = _devmanHost.Target.DebugInfo ? _eventLink : null; _devmanHost.Marshal(); _eventLink.Post(DeviceManager.EventSource, serviceStarted); } catch (Exception e) { _eventLink.Post(DeviceManager.EventSource, "Старт сервиса", e); // останавливаем работу сервиса Stop(); } }
/// <summary> /// Выполняется при остановке службы /// </summary> protected override void OnStop() { try { // закрываем доступ к службе управления if (_startupFlag != null) _startupFlag.Dispose(); if (_protocolManagerHost != null) { _protocolManagerHost.Dispose(); _protocolManagerHost = null; } if (_mmServiceHost != null) { _mmServiceHost.Target.EventLink.Post(EventSources.ManagementService, _serviceGoodbye); _mmServiceHost.Dispose(); _mmServiceHost = null; } // останавливаем рабочий поток для резервного копирования if (_backupWorker != null) { _backupWorker.Stop(60); _backupWorker = null; } // останавливаем рабочий поток для обслуживания логов if (_logWorker != null) { _logWorker.Stop(60); _logWorker = null; } // сообщаем об остановке службы WriteSyslogInfo(_serviceGoodbye); } catch (Exception e) { // записываеминформацию об исключении в лог WriteSyslogException(e); // сообщаем об остановке службы WriteSyslogInfo(_serviceGoodbye); // генерируем исключение повторно throw; } }
/// <summary> /// Выполняется при запуске службы /// </summary> /// <param name="args">Параметры командной строки</param> protected override void OnStart(string[] args) { // создаем лог CreateSyslog(); String serviceHello = String.Format(_serviceHello, ServiceVersion); WriteSyslogInfo(serviceHello); try { // создаем службу управления var ms = new ManagementService(new EventLink(StorageFolder)); // публикуем службу управления _mmServiceHost = new TcpBinaryHost<ManagementService>(ms); _mmServiceHost.Marshal(); ms.EventLink.Post(EventSources.ManagementService, serviceHello); // публикуем менеджер протоколов статистики ms.EventLink.Post(EventSources.ManagementService, _protocolManagerStarted); _protocolManagerHost = new TcpBinaryHost<StatisticsProtocolManager>( new StatisticsProtocolManager(ms)); _protocolManagerHost.Marshal(); // создаем флаг запуска системы _startupFlag = new StartupFlag(ms, StorageFolder); // создаем рабочий поток для резервного копирования _backupWorker = new PeriodicWorker(new PeriodicWorkerDelegate(BackupWorker)); // запускаем его с периодичностью в 1 минуту _backupWorker.Start(_mmServiceHost.Target, (Int32)new TimeSpan(0, 1, 0).TotalSeconds); // создаем рабочий поток для обслуживания логов _logWorker = new PeriodicWorker(new PeriodicWorkerDelegate(LogWorker)); // запускаем его с периодичностью в 12 часов _logWorker.Start(_mmServiceHost.Target, (Int32)new TimeSpan(0, 12, 0, 0).TotalSeconds); } catch (Exception e) { // записываеминформацию об исключении в лог WriteSyslogException(e); // генерируем исключение повторно throw; } }