Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用WSDualHttpBinding捕获WCF客户端中的FaultException_Wcf_Timeout_Faultexception_Wsdualhttpbinding - Fatal编程技术网

无法使用WSDualHttpBinding捕获WCF客户端中的FaultException

无法使用WSDualHttpBinding捕获WCF客户端中的FaultException,wcf,timeout,faultexception,wsdualhttpbinding,Wcf,Timeout,Faultexception,Wsdualhttpbinding,我有一个带有自定义用户名密码验证程序的WCF服务器 public class CustomUserNameValidator : UserNamePasswordValidator { private readonly string m_userName; private readonly string m_password; /// <summary> /// CustomUserNameValidator /// </summar

我有一个带有自定义用户名密码验证程序的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!");
        }
    }
}
在服务器的调试器中,我可以看到FaultException被抛出。但是客户端永远不会收到此异常。 它将在客户端的TimeoutException中结束

如果我使用了正确的凭据,服务器端的函数将被调用,并且服务器端的东西运行良好,因此wcf工作正常

但是我必须做什么,FaultException将被抛出到客户端,这样我才能意识到客户端的凭据是错误的

更新:它可以工作,当我使用WSHttpBinding时,我能够捕获MessageSecurityException。但是,当我使用WSDualHttpBinding和双通道时,我会遇到超时。

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


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

无法向客户端返回值,因为您必须从UserNamePasswordValidator继承并覆盖验证(字符串用户名、字符串密码)。此方法没有(void)返回值。请参阅:在这种情况下,捕获服务中的异常并从那里返回一个值。但是我应该在哪里捕获它呢?对象CustomUserNameValidator在创建时添加到ServiceHost。验证方法由wcf框架调用,因此我不知道如何与验证交互。
try
{
    return service.GetServiceDescription();
}
catch (FaultException)
{
}
catch (TimeoutException)
{
}