WCF: FaultContracts и исключения иерархий

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

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

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

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

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

1 ответ

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

РЕДАКТИРОВАТЬ:

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

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

Другие вопросы по тегам