我使用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();
}
}
答案 0 :(得分:1)
为什么不抛出安全令牌异常?这就是它的用途。此时尚未发送消息且未打开频道,因此您无法收到故障。
答案 1 :(得分:0)
您是否拥有在客户端和服务器之间设置通道的代码?如果是这样,通道是否无法正确创建 - 与消息安全性一样,客户端和服务器必须执行hadnshake,两者都提供其凭据以打开安全通道。这必须在启用任何进一步的通信之前建立,并且传递无效凭证的事实将阻止我怀疑创建的通道。