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 }); } } }