我有一个带有自定义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和双通道时,我正在跑出一段时间。
答案 0 :(得分:0)
你不应该(并且据我所知不能)有从服务到客户的异常。处理这类事情的正确方法是返回一个值,指示用户是否有效。您可能还希望包含一些有关用户无效原因的信息。
关于你的方法的另一件事。使用Exceptions处理实际业务逻辑(例如验证用户)被认为是不好的做法。