カスタムUserNamePasswordValidatorを持つWCFサーバーがあります。クライアント側ではWSDualHttpBindingを使用してWCFクライアントでFaultExceptionをキャッチできません
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!");
}
}
}
、私はFaultExceptionがスローされていることを私は見ることができ、サーバのデバッガでは、
try
{
return service.GetServiceDescription();
}
catch (FaultException)
{
}
catch (TimeoutException)
{
}
プロキシに追加間違った資格情報を使用して関数を呼び出します。しかし、クライアントはこの例外を受け取ることはありません。 クライアント側のTimeoutExceptionになります。
正しい資格情報を使用すると、サーバ側の機能が呼び出され、erveryが正常に動作するので、wcfが正しく動作しています。
しかし、FaultExceptionがクライアントにスローされ、クライアント側で資格情報が間違っていることを認識することができますか?
更新:WSHttpBindingを使用すると、MessageSecurityExceptionをキャッチできます。しかし、WSDualHttpBindingとデュアルチャネルを使用している場合、タイムアウトに陥っています。
UserNamePasswordValidatorから継承し、Validate(string userName、string password)をオーバーライドする必要があるため、クライアントに値を返す方法はありません。このメソッドには(void)戻り値はありません。 http://msdn.microsoft.com/de-de/library/system.identitymodel.selectors.usernamepasswordvalidator.aspx#Y1026 – christian
この場合、サービス内の例外をキャッチし、そこから値を返します。 –
しかし、どこでそれを捕まえるべきですか?オブジェクトCustomUserNameValidatorが作成時にServiceHostに追加されます。 validateメソッドはwcfフレームワークによって呼び出されるので、検証とやりとりする方法はわかりません。 – christian