2009-05-27 8 views
2

Ich habe einfachen WCF-Dienst mit netTcpBinding und Sicherheitsmodus = "Message" und clientCredentialType = "UserName" geschrieben. Alles funktioniert gut, wenn ich den gültigen Benutzernamen und das Passwort übergebe, die Sitzung wird so eingerichtet, wie ich es wollte. Wenn jedoch die Anmeldeinformationen falsch sind, wird die Ausnahme ausgelöst, obwohl ich sie nicht in meiner Clientanwendung in try catch blockieren kann. Hat jemand das gleiche Problem? Hier ist meine benutzerdefinierten Validator ...Wie Abfangen von Ausnahme von UserNamePasswordValidator in WCF-Clientanwendung?

public class UserValidator : UserNamePasswordValidator 
    { 
     static int counter = 0; 
     public override void Validate(string userName, string password) 
     { 
      ++counter;    
      Console.WriteLine(counter.ToString() + " " + DateTime.Now.ToShortTimeString()); 
      if (userName != "test" || password != "test") 

       throw new FaultException("Bad username or password"); 

       //throw new SecurityTokenException(); 

     } 
    } 

Antwort

0

Haben Sie einen Code, der den Kanal zwischen dem Client und dem Server einrichtet? Wenn dies der Fall ist, wird der Kanal nicht ordnungsgemäß erstellt. Wie bei der Nachrichtensicherheit müssen Client und Server den Hostshake ausführen, wobei beide ihre Anmeldeinformationen zum Öffnen eines Sicherheitskanals bereitstellen. Dies muss eingerichtet werden, bevor weitere Kommunikationen aktiviert werden, und die Tatsache, dass ungültige Anmeldeinformationen übergeben werden, stoppt den Kanal, der erstellt wird, vermute ich.

1

Warum werfen Sie nicht die Sicherheits-Token-Ausnahme? Dafür ist es da. An diesem Punkt wurde keine Nachricht gesendet und der Kanal wurde nicht geöffnet, sodass Sie keine Fehlermeldung erhalten.