Обработка ошибок WCF

Ошибки, с которыми столкнулось приложение WCF, относится к одной из трех групп:

  1. Ошибки обмена данными

  2. Ошибки прокси-сервера/канала

  3. Ошибки приложения

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

Ошибки прокси-сервера/канала - это ошибки, возникающие непосредственно в канале или на прокси-сервере. К ошибкам этого типа относятся попытка использовать прокси-сервер или канал, который был закрыт, несоответствие контракта между клиентом и службой или отклонение службой учетных данных клиента. Относящихся к этой категории ошибок различных типов настолько много, что их невозможно здесь перечислить. Ошибки этого типа возвращаются клиенту в исходном виде (какие-либо преобразования над объектами исключений не выполняются).

Ошибки приложения возникают во время выполнения одной из операций службы. Ошибки такого рода передаются клиенту как FaultException или FaultException<TDetail>.

Обработка ошибок в WCF выполняется одним или несколькими методами из следующих:

  • Непосредственная обработка возникшего исключения. Этот метод применяется только для ошибок обмена данными и ошибок прокси-сервера/канала.

  • Использование контрактов сбоя

  • Реализация интерфейса IErrorHandler

  • Обработка событий ServiceHost

Контракты сбоя

Контракты сбоев позволяют определять ошибки, которые могут возникать во время выполнения работы службы, независимо от платформы. По умолчанию все ошибки, возникающие при работе службы, возвращаются клиенту в виде объекта FaultException. Объект FaultException содержит очень мало сведений. Для управления тем, какие сведения передаются клиенту, можно определить контракт сбоя и возвращать ошибки в виде исключения FaultException<TDetail>. Дополнительные сведения см. в разделе "Указание и обработка ошибок" в контрактах и службах.

IErrorHandler

Интерфейс IErrorHandler обеспечивает больший контроль над тем, как приложение WCF будет реагировать на ошибки. Он предоставляет разработчику полный доступ над содержанием сообщений об ошибках, которые возвращаются клиенту, и позволяет выполнять пользовательскую обработку ошибок, например ведение журнала. Дополнительные сведения о обработке ошибок и отчетах IErrorHandler и расширении управления ими

События ServiceHost

Класс ServiceHost применяется для размещения служб и определяет несколько событий, которые могут потребоваться для обработки ошибок. Например:

  1. Faulted

  2. UnknownMessageReceived

Дополнительные сведения см. в разделе ServiceHost.