Я предполагаю, что вы используете WCF, поскольку ваш вопрос помечен им. Хорошая практика обработки исключений с помощью WFC - не разрешать исключениям пузыриться по проводам с вашим потребителем, а вместо этого выбрасывать значимые исключения FaultExceptions.
В вашей операции всегда должен быть блок try ... catch, если есть вероятность, что он может сгенерировать исключение. Если вы разрешите необработанное исключение «пузыриться», это может привести только к двум сценариям: если вы сконфигурировали свой сервис таким образом, чтобы разрешать подробности исключений при сбоях, вы откроете для себя внутренние возможности вашего сервиса, открывая себя для нарушений безопасности. Или вы не настроили это в своем сервисе, и потребитель получает очень общее сообщение, указывающее, что что-то пошло не так, что не очень полезно для них или для группы поддержки.
Что вы должны сделать, это объявить одно или несколько исключений FaultException, в зависимости от того, какие сообщения вы хотите, чтобы пользователь получил от вашей операции, и оформить их как FaultContracts в объявлении вашей операции. Тогда вы можете попытаться ... поймать определенные исключения и выбросить конкретные ошибки. Вы также можете попробовать ... поймать, что ловит исключение и выдать очень общий сбой.
Ключевым моментом здесь является не раскрытие слишком большой информации о том, что происходит внутри вашей работы - особенно следы стека!
Ошибка - это просто еще один контракт данных, поэтому он объявлен в вашем WSDL. Это означает, что ваш потребитель может специально отследить ошибку и реагировать на ошибки, вызванные вашей работой, как если бы это было исключение из их кода.
Надеюсь, это поможет.
Джо.