【发布时间】:2011-07-15 11:22:33
【问题描述】:
我有一个带有自定义 UserNamePasswordValidator 的 WCF 服务器。
public class CustomUserNameValidator : UserNamePasswordValidator
{
private readonly string m_userName;
private readonly string m_password;
/// <summary>
/// CustomUserNameValidator
/// </summary>
/// <param name="userName"></param>
/// <param name="password"></param>
public CustomUserNameValidator(string userName, string password)
{
m_userName = userName;
m_password = password;
}
/// <summary>
/// Validate
/// </summary>
/// <param name="userName"></param>
/// <param name="password"></param>
public override void Validate(string userName, string password)
{
if (!(userName == m_userName && password == m_password))
{
throw new FaultException("Authentication failed!");
}
}
}
在客户端,我调用了一个向代理添加了错误凭据的函数
try
{
return service.GetServiceDescription();
}
catch (FaultException)
{
}
catch (TimeoutException)
{
}
在我可以看到的服务器调试器中,抛出了 FaultException。但是客户端永远不会收到这个异常。 它最终会在客户端出现 TimeoutException。
如果我使用正确的凭据,将调用服务器端的函数,并且一切正常,因此 wcf 工作正常。
但是我该怎么做,FaultException 将被抛出给客户端,这样我才能意识到客户端的凭据是错误的?
更新:它有效,当我使用 WSHttpBinding 时,我能够捕获 MessageSecurityException。但是当我使用 WSDualHttpBinding 和双通道时,我会遇到超时。
【问题讨论】:
标签: wcf timeout faultexception wsdualhttpbinding