Как отловить исключение из UserNamePasswordValidator в клиентском приложении WCF? - PullRequest
2 голосов
/ 27 мая 2009

Я написал простой сервис WCF с использованием netTcpBinding и security mode = "Message" и clientCredentialType = "UserName". Все работает нормально, когда я передаю действительные имя пользователя и пароль, сессия устанавливается так, как я хотел. Однако, когда учетные данные неверны, генерируется исключение, хотя я не могу перехватить его в своем клиентском приложении в блоке try catch. У кого-нибудь была такая же проблема? Вот мой пользовательский валидатор ...

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

        }
    }

Ответы [ 2 ]

1 голос
/ 21 сентября 2009

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

0 голосов
/ 04 июня 2009

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

...