Как предотвратить "Запрос на получение основного разрешения не удалось" от сбоя клиента WCF?

У меня есть служба WCF с несколькими операциями. Каждая операция имеет тег "PrincipalPermission", что-то вроде этого:

[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
public ProductsDto GetAllProducts()
{
     // Do operation here ...
}

Проблема в том, что если пользователь не входит в роль "Администратор", служба выдает исключение

Запрос основного разрешения не выполнен

Это приводит к повреждению канала клиента до состояния "Ошибка".

Я хочу как-то это уловить и отправить клиенту сообщение "Ошибка",

чтобы клиент знал, что он пытался сделать что-то, что не должен делать, не нарушая канала!

Я попытался использовать блок try-catch внутри операции, но это не помогло. Исключение происходит "вне" самой операции.

Как я могу решить это?

1 ответ

Там специальный интерфейс IErrorHandler что вы можете реализовать и подключиться к службе WCF для обработки исключения. С помощью IErrorHandler позволит вам обрабатывать как исключения безопасности, так и любые исключения, генерируемые кодом сериализации.

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

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