Столкнулся с такой проблемой. Если я на сервере, внутри метода службы бросаю SecurityException с сообщением, которое хочу отобразить пользователю на клиенте, это исключение заменяется на FaultException с сообщением "Отказано в доступе". Причём в таком виде оно доходит не только до клиента, но уже до реализации IErrorHandler, подсунутой хосту. Если бросить не SecurityException, а его наследника - результат тот же самый. Понятно, что можно бросать другой тип исключения, объявленный в контракте сбоев, но если по семантике это SecurityException, такое решение не вполне корректно.
Ответ
Чтобы объект типа SecurityException пробрасывался на сторону клиента его нужно прописать в интерфейсе контракта при помощи атрибута FaultContractAttribute
[ServiceContract]
public interface IServiceContract
{
[OperationContract]
[FaultContractAttribute(typeof(SecurityException))]
void CallMethod();
}
Комментариев нет:
Отправить комментарий