Каковы рекомендации по созданию нового типа исключения вместо использования одного из встроенных исключений в.Net?
Проблема, которая заставила меня задуматься, заключается в следующем. У меня есть служба WCF, которая является базовой службой ввода-вывода. Если служба не может создать вывод, потому что ввод недействителен, я хочу создать исключение, но какое?
Прямо сейчас я просто бросаю system.Exception, но мне это кажется неправильным, я не знаю почему, это просто неправильно. Одна вещь, которая меня беспокоит, если я тестирую ее с помощью модульного теста и ожидаю, что будет выдано исключение system.Exception. Исключение также может быть вызвано фреймворком или другим кодом, а не кодом, который я исключил. Тогда тест пройдет, так как я получу ожидаемое исключение, но он должен был провалиться.
Что ты порекомендуешь?
Решение проблемы
Избегайте бросать System.Exceptionили System.ApplicationExceptionсебя, так как они слишком общие.
Для сервисов WCF существуют Fault Contracts — общее исключение, которое вы можете указать подписчикам для обработки.
Пометить интерфейс командой:
[FaultContract( typeof( LogInFault ) )]
void LogIn( string userName, string password, bool auditLogin );
Затем, если есть исключение, вы можете выдать эту конкретную ошибку:
throw new FaultException<LogInFault>( new LogInFault(), "message" );
Используйте [DataContract]сериализацию по своей вине - это избавит вас от необходимости обрабатывать все исключения сериализации, которые обычно требуются.
Комментариев нет:
Отправить комментарий