Обертывание веб-сервиса в блоке попытки/выгоды

Для вашего текущего проекта это вызвано тем, что Policy должен содержать хотя бы одно требование.

Не уверен, каково определение для C, я предлагаю вам реализовать UserRoleCheckRequirement и переместить C в UserRoleCheckRequirement, чтобы вернуть context.Succeed(requirement);. А затем проверьте AuthenticatedUser и другую логику авторизации в HandleRequirementAsync.

5
задан Dan Beaulieu 11 August 2015 в 19:33
поделиться

5 ответов

Я предполагаю, что Вы используете WCF, так как Ваш вопрос отмечен с ним. Хорошая практика в обработке исключений с WFC не позволяет исключениям пузыриться через провод Вашему потребителю, но бросать значимый FaultExceptions вместо этого.

У Вас должна всегда быть попытка... ловят блок в Вашей операции, если существует шанс, исключение могло бы быть сгенерировано им. Если Вы позволяете сырым данным excption пузыриться, только два сценария могут закончиться: при конфигурировании сервиса для разрешения деталей исключения в отказах, Вы выставите внутренности своего сервиса, открывающего себя для нарушений защиты. Или Вам не настроили это в Вашем сервисе, и потребитель получает очень универсальное сообщение, которое указывает, что что-то пошло не так, как надо, который не очень полезен для них или службы поддержки.

То, что необходимо сделать, объявляют один или несколько FaultExceptions, в зависимости от того, какие сообщения Вы хотите, чтобы пользователь получил от Вашей операции, украсьте их как FaultContracts на Вашем объявлении операции. Затем можно попробовать... выгоду определенные исключения и бросить определенные Отказы. У Вас может также быть попытка... ловят, который ловит исключение, и бросьте очень общий Отказ.

Ключ здесь, не показывает слишком много информации того, что продолжает Вашу операцию внутренне - особенно отслеживания стека!

Отказ является просто другим контрактом данных, таким образом, он объявляется в Вашем WSDL. Это означает, что Ваш потребитель может поймать отказ конкретно и может реагировать на отказы, брошенные от Вашей операции, как будто это было исключение, бросаемое из их кода.

Надеюсь, это поможет.

Joe.

4
ответ дан 14 December 2019 в 04:49
поделиться

Это в порядке, но попытка просто поймать типы исключительной ситуации, которые можно обработать.

Постарайтесь не ловить любое "Исключение" или, если Вы делаете так, регистрируете и/или предупреждаете пользователя и/или повторяете для вызова веб-сервиса.

Если это - приложение форм окон, я обычно переношу последнюю выгоду "Исключения" в блок ОТЛАДКИ #if, чтобы не скрывать исключения при отладке или тестировании.

#if !DEBUG
catch (Exception ex)
{
    // show messagebox, log, etc
}
#endif
2
ответ дан 14 December 2019 в 04:49
поделиться

Да, необходимо перенести вызов веб-сервиса в выгоду попытки. Не используйте пустую выгоду, поскольку они (главным образом) - чистое зло. Ваш блок выгоды должен, по крайней мере, зарегистрировать исключение. Я не знаю о Вашей логике приложений, но вероятно некоторое сообщение (как "информация от сервиса не был выбран из-за технической ошибки"), должен быть показан пользователю.

1
ответ дан 14 December 2019 в 04:49
поделиться

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

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

0
ответ дан 14 December 2019 в 04:49
поделиться

это - случай, который мог привести к выданному исключению, таким образом, да это должно быть перенесено на блоке выгоды попытки.

Что сделать с обработчиком исключений, он зависит от логики программы...

0
ответ дан 14 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: