У меня есть служба WCF, настроенная на использование пользовательской проверки UserName через переопределенный метод Validate () класса System.IdentityModel.Selectors.UserNamePasswordValidator.
Все методы контракта были украшены атрибутом FaultContractAttribute, чтобы указать, что настраиваемая ошибка SOAP является возвращаемой.
При выдаче FaultException , где T - это тип, указанный в FaultContractAttribute, все ведет себя как ожидалось, и я получаю пользовательскую ошибку в XML-ответе.
Однако, если я попытаюсь сгенерировать FaultException в переопределенном методе Validate () класса аутентификации имени пользователя, я получу общую ошибку SOAP по следующей причине:
«Создатель этой ошибки не указал причину.»
Однако, если я изменю код для генерации общей ошибки SOAP, как в:
throw new FaultException("Authentication failed.");
По крайней мере, я получу "Ошибка аутентификации". в элементе разума.
Мои вопросы:
- Почему исключения FaultException не обрабатываются одинаково, если они выбрасываются в Validate (), как в реализации службы?
- Возможно ли, чтобы исключения, генерируемые в методе Validate (), соответствовали атрибуту FaultContractAttribute, указанному в методах контракта?
Любая помощь с благодарностью. Я предполагаю, что аутентификация происходит до того, как сообщение будет связано с каким-либо методом контракта, и, следовательно, не связано с FaultContractAttribute, но любая статья, подтверждающая это и предлагающая обходной путь, будет очень полезной.
Тали