Автоматический запуск службы Windows при запуске Windows, который зависит от Oracle - PullRequest
7 голосов
/ 28 мая 2011

Я разработал службу Windows, которая должна запускаться автоматически при запуске Windows. Эта служба подключается к базе данных Oracle, поэтому я сделал свою службу зависимой от Oracle Services с помощью утилиты командной строки sc: sc config MyService зависимость = OracleServiceXE / OracleXETNSListener

Пока все хорошо, зависимость была установлена ​​успешно. Но при запуске Windows моя служба не может запуститься, и я получаю следующее сообщение об ошибке (Oracle): «ORA-12528: TNS: listener: все соответствующие экземпляры блокируют новые подключения».

Как я думаю, службы Oracle запускаются при запуске моей службы, но они не «полностью инициализированы». Через несколько секунд я могу без проблем запустить свой сервис из сервисной консоли.

Итак, как я могу автоматически запустить мою службу при запуске Windows, которая зависит от соединения с БД Oracle?

Мой сервис был разработан в C # на платформе .Net 4, в среде VS 2010.

Pls. помоги мне, это действительно важная задача для меня!

1 Ответ

10 голосов
/ 28 мая 2011

Помните, что код для запуска вашей службы должен делать как можно меньше.Другими словами, не заставляйте свою службу запуска проверять доступность сервера Oracle или вообще ничего не делайте.Попросите вашу службу сделать следующее:

  • Записать тот факт, что он запущен
  • Загрузить любую подходящую конфигурацию из конфигурационных файлов / реестра / и т. Д.
  • Ускорить потокон будет пытаться «запустить» службу должным образом каждые N секунд и будет повторяться M раз, пока она не сдастся.Настройте N и M из вашего конфигурационного файла / реестра

Поток "попытается" подключиться к соответствующему серверу Oracle, а в случае сбоя перейдите в спящий режим на N секунд и сделайте это M раз,Если это удастся, он может начать делать «мясо» того, что должен.

По иронии судьбы, вероятно, тот факт, что служба Oracle делает что-то похожее на то, что я предложил вам, вызывает проблему,Возвращая «Да, я начал» быстро обратно в Windows при запуске, он позволяет загружать вашу службу, даже если Oracle все еще занята раскруткой.В идеале в этом сценарии вместо отклонения ваших запросов Oracle должен ставить их в очередь для обработки, когда он будет готов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...