如何在WCF客户端应用程序中从UserNamePasswordValidator捕获异常?
我已经使用netTcpBinding和security mode=“Message”以及clientCredentialType=“UserName”编写了简单的WCF服务。当我传递有效的用户名和密码时,一切正常,会话按照我想要的方式建立。 但是,当凭据错误时,会抛出异常,尽管我无法在try-catch块中的客户端应用程序中捕获它。 有人有同样的问题吗? 这是我的自定义验证器如何在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 {
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,两者都提供打开安全通道的凭据。这必须在启用任何进一步的通信之前建立,并且传递无效凭据的事实将停止创建通道,我怀疑。为什么不抛出安全令牌异常?这就是它的目的。此时,尚未发送消息,且通道尚未打开,因此无法恢复故障