У меня есть WCF-сервер с пользовательским UserNamePasswordValidator.
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 и двухканальный канал, у меня заканчивается время ожидания.