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
и тогда сообщение может передать причину почему.