2011-12-19 3 views
3

У меня есть служба WCF, которая ведет переговоры с БД. Все операции проходят через службу. Каков наилучший способ вернуть исключение клиенту (в данном случае приложение WPF).Обработка исключений Приложение WPF с сервисом WCF

Допустим, у меня есть GetCustomer в службе, которая возвращает список клиентов. Но это исключение. Как мне вернуть это исключение клиенту?

ответ

-1

Один из способов сделать это - предоставить информацию о любых возможных исключениях в рамках вашего контракта на обслуживание. Итак, в вашем примере GetCustomer возвращает список ваших клиентов. но он также возвращает потенциально пустой набор данных о любых произошедших исключениях. Это хорошая идея, потому что не каждый потребитель вашей службы будет .NET-приложением, зависящим от отправки ошибок .NET, не является разумным.

+0

-1: пожалуйста, укажите, почему это было бы хорошей идеей. –

3

Microsoft рекомендует внедрение IErrorHandler для WCF исключений

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

Внедрите метод ProvideFault для управления сообщением о неисправности, которое является , возвращенным клиенту.

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

Here лучше, чем образец MSDN

IMyService proxy = ...; //Get proxy from somewhere 
try { 
    proxy.MyMethod(); 
} 
catch (CommunicationException) { ... } 
catch (TimeoutException) { ... } 
catch (FaultException<MyApplicationFault> myFault) { 
    MyApplicationFault detail = myFault.Detail; 
    //Do something with the actual fault 
} 
catch (FaultException otherFault) { ... } 
+0

Как вернуть это исключение/ошибку клиенту в вашем примере? – VoodooChild

+0

вы не возвращаете исключение из службы, а бросаете его из сервиса throw new FaultException (ошибка); и клиент поймает код выше. –