WCF IErrorHandler.ProvideFault () поведение - PullRequest
4 голосов
/ 27 ноября 2010

Мои методы обслуживания помечены PrincipalPermissionAttribute, и у меня есть пользовательская реализация IErrorHandler, прикрепленная к службе.Когда входящий запрос не имеет разрешений на выполнение метода, System.Security.SecurityException выбрасывается.Затем запускается IErrorHandler.ProvideFault(), и я хочу сообщить об особой ошибке.Но параметр error не является исходным исключением, он не типизирован FaultException.Кроме того, error.InnerException является нулевым, несмотря на то, что у меня есть следующие настройки в конфигурации:

<serviceDebug includeExceptionDetailInFaults="true"/>

Почему?Как мне добиться желаемого поведения?

1 Ответ

1 голос
/ 27 января 2011

Согласно это SecurityException является своего рода «особенным» для WCF:

Исключение SecurityException связано с CAS (Code Access Security) и является фатальным исключением,Так как это исключение не связано с какими-либо исключениями модели сервиса, оно не может быть обработано IErrorHandler.

Так что в итоге я создал дополнительный класс, методы которого (вызываются из методов класса, реализующего интерфейс сервиса)) отмечены PrincipalPermissionAttribute, а функция-обработчик - try / catch.

...