カスタム 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 とデュアル チャネルを使用していると、タイムアウトが発生します。