예제 #1
0
 /// <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();
 }
예제 #2
0
        /// <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();
            }
        }
예제 #3
0
        /// <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;
            }
        }
예제 #4
0
        /// <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;
            }
        }