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

如何在WCF客户端应用程序中从UserNamePasswordValidator捕获异常?,wcf,wcf-binding,wcf-security,Wcf,Wcf Binding,Wcf Security,我已经使用netTcpBinding和security mode=“Message”以及clientCredentialType=“UserName”编写了简单的WCF服务。当我传递有效的用户名和密码时,一切正常,会话按照我想要的方式建立。 但是,当凭据错误时,会抛出异常,尽管我无法在try-catch块中的客户端应用程序中捕获它。 有人有同样的问题吗? 这是我的自定义验证器 public class UserValidator : UserNamePasswordValidator {

我已经使用netTcpBinding和security mode=“Message”以及clientCredentialType=“UserName”编写了简单的WCF服务。当我传递有效的用户名和密码时,一切正常,会话按照我想要的方式建立。 但是,当凭据错误时,会抛出异常,尽管我无法在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();

        }
    }

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

为什么不抛出安全令牌异常?这就是它的目的。此时,尚未发送消息,且通道尚未打开,因此无法恢复故障