Если ваша служба 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)
{
...
}