WCF имеет исключение передать клиенту - PullRequest
9 голосов
/ 22 февраля 2011

У меня есть служба, которая может выдавать исключения. Я хочу быть в состоянии отловить исключения у клиента. Основные исключения, которые меня интересуют: DbUpdateException и InvalidOperationException. Для остальных исключений достаточно знать, что исключение было выброшено.

Как я могу получить исключения, обнаруженные в клиенте?

Ответы [ 2 ]

11 голосов
/ 22 февраля 2011

Если ваша служба WCF выдает исключение, то по умолчанию оно поступает к клиенту как FaultException. Вы можете настроить свой сервис так, чтобы он включал сведения об исключениях в отказах, например:

<serviceDebug includeExceptionDetailInFaults="true" />

Но вы, вероятно, не хотите делать это , никогда не стоит раскрывать внутренние детали реализации клиентам.

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

public interface YourServiceContract
{
   [FaultContract(typeof(YourFaultClass))]
   [OperationContract(...)]
   YourServiceResponseClass YourServiceOperation(YourServiceRequestClass request);
}

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

try
{
   // service operation
}
catch (FaultException<YourFaultClass> customFault)
{
   ...
}
catch (FaultException generalFault)
{
   ...
}
4 голосов
/ 22 февраля 2011

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

Прочтите это для получения дополнительной информации: Документы MSDN

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