2009-05-27 3 views
2

Я написал простой сервис WCF, используя netTcpBinding и режим безопасности = «Сообщение» и clientCredentialType = «UserName». Все работает нормально, когда я передаю действительное имя пользователя и пароль, сессия устанавливается так, как я хотел. Однако, когда учетные данные ошибочны, исключение вызывается, хотя я не могу его поймать в своем клиентском приложении в блоке try catch. У кого-то такая же проблема? Вот мой валидатор ...Как поймать исключение из UserNamePasswordValidator в клиентском приложении WCF?

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(); 

     } 
    } 

ответ

0

У вас есть код, который устанавливает канал между клиентом и сервером? Если это так, правильно ли создается канал - как и при безопасности сообщений, клиент и сервер должны выполнить hasnshake, предоставляя свои учетные данные, чтобы открыть канал безопасности. Это должно быть установлено до того, как будут активированы какие-либо дополнительные сообщения, а тот факт, что недопустимые учетные данные будут переданы, остановит создаваемый канал, который я подозреваю.

1

Почему вы не выбрасываете исключение токена безопасности? Вот для чего это. В этот момент сообщение не отправляется, и канал не открывается, поэтому вы не можете получить отказ.