如何从WCF客户端应用程序中的UserNamePasswordValidator捕获异常?

时间:2009-05-27 12:15:48

标签: wcf wcf-binding wcf-security

我使用netTcpBinding编写了简单的WCF服务,安全模式=“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 个答案:

答案 0 :(得分:1)

为什么不抛出安全令牌异常?这就是它的用途。此时尚未发送消息且未打开频道,因此您无法收到故障。

答案 1 :(得分:0)

您是否拥有在客户端和服务器之间设置通道的代码?如果是这样,通道是否无法正确创建 - 与消息安全性一样,客户端和服务器必须执行hadnshake,两者都提供其凭据以打开安全通道。这必须在启用任何进一步的通信之前建立,并且传递无效凭证的事实将阻止我怀疑创建的通道。