Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

Как заставить WCF не подменять SecurityException

Столкнулся с такой проблемой. Если я на сервере, внутри метода службы бросаю SecurityException с сообщением, которое хочу отобразить пользователю на клиенте, это исключение заменяется на FaultException с сообщением "Отказано в доступе". Причём в таком виде оно доходит не только до клиента, но уже до реализации IErrorHandler, подсунутой хосту. Если бросить не SecurityException, а его наследника - результат тот же самый. Понятно, что можно бросать другой тип исключения, объявленный в контракте сбоев, но если по семантике это SecurityException, такое решение не вполне корректно.


Ответ

Чтобы объект типа SecurityException пробрасывался на сторону клиента его нужно прописать в интерфейсе контракта при помощи атрибута FaultContractAttribute
[ServiceContract] public interface IServiceContract { [OperationContract] [FaultContractAttribute(typeof(SecurityException))] void CallMethod(); }

Комментариев нет:

Отправить комментарий