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

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

  1. Ошибки связи

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

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

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

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

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

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

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

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

  • Внедрение интерфейса IErrorHandler

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

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

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

IErrorHandler

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

События ServiceHost

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

  1. Faulted

  2. UnknownMessageReceived

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