Я использую Quartz.NET в качестве встроенного планировщика для моей службы Windows.
Quartz настроен на использование AdoJobStore
, и каждый раз, когда сервер SQL по какой-либо причине недоступен, Quartz генерирует исключение Quartz.JobPersistenceException
, которое убивает мою службу Windows.
Очевидно, что Quartz IScheduler
создается и запускается изнутри блока try...catch
из OnStart
моего сервиса, но после запуска IScheudler
все исключения, выданные Quartz, больше не перехватываются этим. catch
блок ...
Любые идеи о том, как предотвратить исключения Quartz моей службы Windows в этом сценарии, приветствуются ...
Мне известно, что я могу настроить перезапуск службы после сбоя на вкладке Восстановление службы, но это исправление, а не решение ...
EDIT:
Эти исключения вызываются из метода ConnectionAndTransactionHolder
класса JobStoreSupport
библиотеки Quartz.NET, когда метод не может получить и открыть соединение с БД или не удается вызвать BeginTransaction
. Поскольку Quartz.NET является открытым исходным кодом, и у меня есть доступ к этому коду, я могу просто закомментировать код, который выдает эти JobPersistenceException
исключения, но без подробного анализа исходного кода Quartz.NET, я понятия не имею, какой эффект это даст, если Quartz продолжит пытаться сканировать триггеры, пока соединение с БД не станет снова доступным или нет ... также я не уверен, что лицензионное соглашение разрешит любую модификацию исходного кода ...