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