WCF: FaultContracts и иерархии исключений - PullRequest
0 голосов
/ 24 марта 2011

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

В прошлых проектах я использовал для создания не- тривиальная иерархия исключений, например:

BaseSystemException
    CustomerServiceException
        CustomerNotFoundException
        BadCustomerNameException
        CustomerAlreadyExistsException
        ...
    OrderServiceException
        OrderNotFoundException
        OrderAlreadyExistsException
        ...

Однако реализация такой иерархии быстро становится утомительной в WCF, поскольку мне приходится указывать каждый конкретный тип исключения в его собственном FaultContract.Теперь, поскольку обе службы являются частью одной и той же системы, не возникает проблем с утечкой информации / конфиденциальных вызовов / и т. Д.Я хочу, чтобы B предоставил как можно больше информации в своих исключениях, чтобы A мог соответственно реагировать.Следует отметить, что на практике многие из этих исключений обрабатываются одинаково (сбой операции и уведомление пользователя), но при разработке схемы исключений я не хочу предполагать одинаковую обработку для всех исключений.

Может кто-нибудь предложить подход, который не требует FaultContract для каждого типа исключения?Есть ли более простой способ?В конце концов, это внутренний интерфейс.Я слишком идеалистичен в желании использовать иерархию исключений?

1 Ответ

0 голосов
/ 24 марта 2011

Вы пытались вместо этого выдать FaultException ? Это не нарушает вашу службу WCF, поэтому ваш клиент может обработать исключение.

EDIT:

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

например, CustomerNotFoundException и BadCustomerNameException могут стать FailedToFetchCustomerException, и тогда сообщение может объяснить причину.

...