Ejemplo n.º 1
0
        public void Start() //метод вызывается при старте службы
        {
            try
            {
                try                                                       //пишем в лог о запуске службы
                {
                    using (var repository = new Repository <DbContext>()) //использую репозиторий для работы с БД, какая будет БД указано в DbContext
                    {
                        var logReccord = new Log
                        {
                            Date        = DateTime.Now,
                            MessageTipe = "info",
                            Operation   = "StartService",
                            Exception   = ""
                        };
                        repository.Create(logReccord);
                    }
                }
                catch (Exception ex)
                {
                    Thread.Sleep(60000);
                    // еcли не доступна БД и не получается залогировать запуск, ждём 60 секунд и пробуем еще раз.
                    using (var repository = new Repository <DbContext>())
                    {
                        repository.Create(new Log //создаю объект Log и пишу его в БД
                        {
                            Date        = DateTime.Now,
                            MessageTipe = "error",
                            Operation   = "StartService",
                            Exception   = ex.GetType() + ": " + ex.Message
                        });
                        repository.Create(new Log
                        {
                            Date        = DateTime.Now,
                            MessageTipe = "info",
                            Operation   = "StartService2Attemp",
                            Exception   = ""
                        });
                    }
                }

                using (var repository = new Repository <DbContext>())                                    //инициализирую парамтры приложения из БД
                {
                    omnideskParam     = repository.Get <Parametr>(p => p.Name == "Omnidesk");            //ссылка на омнидеск
                    userLoginParam    = repository.Get <Parametr>(p => p.Name == "dafaultuserlogin");    //логин
                    userPasswordParam = repository.Get <Parametr>(p => p.Name == "dafaultuserpassword"); //пароль
                    intervalParam     = repository.Get <Parametr>(p => p.Name == "interval");            //пауза между запросами в омнидеск
                    OmnideskClient    = new OmnideskClient(omnideskParam.Value, userLoginParam.Value, userPasswordParam.Value);
                }

                //создаю и запускаю задачу, чтобы в бесконечном цикле будет проверять Омнидеск
                Task tsk = new Task(CheckOmnidesk);
                tsk.Start();
            }
            catch (Exception ex)
            {
                using (var repository = new Repository <DbContext>())
                {
                    repository.Create(new Log
                    {
                        Date        = DateTime.Now,
                        MessageTipe = "fatal",
                        Operation   = "StartService",
                        Exception   = ex.GetType() + ": " + ex.Message
                    });
                }
            }
        }