Mam usługę WCF skonfigurowaną do używania niestandardowego sprawdzania poprawności nazwy użytkownika za pomocą overriden Validate() metody klasy System.IdentityModel.Selectors.UserNamePasswordValidator.Uwierzytelnianie WCF UserName i umowy o błędzie
Wszystkie metody umowy zostały udekorowane za pomocą FaultContractAttribute w celu określenia niestandardowego błędu SOAP jako podlegającego zwrotowi.
Podczas rzucania wyjątku FaultException <T>, gdzie T jest typem określonym w klasie FaultContractAttribute, wszystko działa zgodnie z oczekiwaniami, a otrzymuję niestandardowy błąd w pliku XML odpowiedzi.
Jednak gdy próbuję i rzucać FaultException <T> w nadpisane Walidacja() metoda klasy uwierzytelniania nazwę użytkownika, dostaję ogólny błąd SOAP z następującego powodu:
„Twórca tego błędu nie nie określaj przyczyny. "
Jednakże, jeśli mogę zmienić kod, aby rzucić ogólny błąd SOAP jak w:
throw new FaultException("Authentication failed.");
będę przynajmniej dostać „Uwierzytelnienie nie powiodło się.” w elemencie przyczyny.
Moje pytania są następujące:
- Dlaczego nie są FaultException <T> wyjątki traktowane tak samo, jeśli są wyrzucane w Weryfikuj(), ponieważ są one w ramach realizacji usługi?
- Czy możliwe jest, aby wyjątki zgłoszone w metodzie Validate() były zgodne z FaultContractAttribute określonym w metodach umowy?
Każda pomoc bardzo doceniona. Domyślam się, że uwierzytelnienie przychodzi, zanim wiadomość jest powiązana z jakąkolwiek metodą umowy, a zatem nie jest powiązane z FaultContractAttribute, ale każdy artykuł potwierdzający to i dający obejście byłby bardzo użyteczny.
Tali
Dzięki za komentarz na to pytanie. Jakieś rozwiązania? Nadal szukam odpowiedzi w marcu 2013 r. –