Обработка исключений потоков в WCF - PullRequest
2 голосов
/ 10 июля 2009

Наши службы WCF иногда создают рабочий поток для обработки чего-то, о чем клиент не заботится. Рабочие потоки не сообщают о каком-либо статусе клиенту. Фактически, служба, вероятно, уже вернула клиенту результаты к моменту завершения потока.

Один из этих фоновых потоков недавно вызвал исключение. Исключение осталось необработанным, поэтому произошел сбой IIS.

Я могу исправить это конкретное исключение, но в будущем кто-то может добавить некоторый код, вызывающий другое неожиданное исключение. Я хочу предотвратить это от сбоя IIS в будущем.

Я знаю, что приложения System.Windows.Forms могут обрабатывать исключения потоков, реализуя Application.ThreadException. Есть ли что-то подобное, что я могу сделать из службы WCF? Или, если Application.ThreadException - это путь, как бы я подключил его к службе WCF?

В документации MSDN для AppDomain.UnhandledException сказано, что это не предотвращает сбои. Документы для ServiceModel.AsynchronousThreadExceptionHandler предполагают, что это только для потоков WCF.

Как минимум, я хотел бы получить трассировку стека из исключения перед сбоем, но во избежание будущих сбоев было бы идеально.

Опять же, позвольте мне подчеркнуть, что это не исключение, которое я хочу вернуть как ошибку WCF клиенту.

Ответы [ 3 ]

1 голос
/ 10 июля 2009

Если вы создаете потоки, вы должны всегда убедиться, что у них есть защита от исключений. Обработка AppDomain для необработанных исключений только позволяет регистрировать и отслеживать ошибку, но не останавливает сбой хоста.

1 голос
/ 10 июля 2009

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

Помните, что IIS перезапустит службу для вас, очистит и предположительно работает.

0 голосов
/ 11 июля 2009

Вы можете взглянуть на реализацию IErrorHandler с поведением отправки:

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx

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