Как разрешить обработчикам ошибок обрабатывать исключения AccessViolationExceptions в WCF?

#c# #.net #wcf #com #windows-services

#c# #.net #wcf #com #windows-services

Вопрос:

Конечно, мы должны избегать перехвата и попыток обработки исключений AccessViolationExceptions (AVES). Однако в моем текущем случае исключение генерируется из компонента, управляемого COM , который завершает процесс, который вызвал исключение, следовательно, правильную очистку. Однако служба Windows, на которой размещен WCF, которая использует указанный компонент COM , получает всплывающий AVE, вызывающий сбой службы.

Похоже, что установленные обработчики IErrorHandlers не запускают / не обнаруживают AVES.

Есть ли какой-либо способ разрешить обработчикам ошибок WCF перехватывать AVES?

Ответ №1:

В качестве варианта вы можете попробовать добавить обработчик в AppDomain.CurrentDomain.Необработанное исключение, при котором вы можете перезапустить службу снова.

Или вы можете запустить свой основной win_service в одном (‘Main’) домене приложения и разместить службу WCF в другом (‘Sub’) домене приложения. Таким образом, вы можете выгрузить (перезагрузить) вспомогательный процесс, не затрагивая основной процесс.

Комментарии:

1. Видите ли, моя главная проблема связана с другими текущими вызовами wcf, которые, по сути, завершаются ненормально из-за EAV в другой службе. При обоих подходах мне нужно принудительно завершить работу домена приложения, в котором запущены мои службы WCF. Это то, чего я пытаюсь избежать. Я уже перезапускаю службу при первом сбое.

Ответ №2:

Для обработчиков IErrorHandlers невозможно перехватывать исключения, аналогичные исключениям AccessViolationExceptions (SEHExceptions).