【问题标题】:Not able to catch FaultException in WCF client with WSDualHttpBinding无法使用 WSDualHttpBinding 在 WCF 客户端中捕获 FaultException
【发布时间】: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


    【解决方案1】:

    你不应该(据我所知不能)有从服务到客户端的异常。处理此类事情的正确方法是返回一个指示用户是否有效的值。您可能还想包含一些关于用户无效的原因的信息。

    关于你的方法的另一件事。使用异常处理实际业务逻辑(如验证用户)被认为是一种不好的做法。

    【讨论】:

    • 没有办法向客户端返回值,因为你必须从 UserNamePasswordValidator 继承并覆盖 Validate(string userName, string password)。此方法没有 (void) 返回值。见:msdn.microsoft.com/de-de/library/…
    • 在这种情况下,在服务中捕获异常并从那里返回一个值。
    • 但是我应该在哪里捕捉它?对象 CustomUserNameValidator 在创建时添加到 ServiceHost。 validate方法是wcf框架调用的,所以不知道怎么和validation交互。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多