wsHttpBinding,从自定义UserNamePasswordValidator捕获FaultException

时间:2015-02-17 11:17:05

标签: wcf wshttpbinding faultexception

我有一个带有wsHttpBinding的WCF服务。一切都运行得很好,但我在我的客户端捕获故障时遇到问题,从我的自定义身份验证器发送 我使用来自msdn的自定义Authenticator代码:
https://msdn.microsoft.com/en-us/library/aa702565(v=vs.110).aspx

// This throws an informative fault to the client.
    throw new FaultException("Unknown Username or Incorrect Password");

这条评论说我们向客户提出了一个信息错误,但我无法在客户端抓到它:

bool isReachable = false;
                try {
                    isReachable = client.agentIsReachable();
                }
                catch(FaultException faultException){
                    MessageBox.Show(faultException.Message);
                }

调试时我可以看到,抛出了一个错误,但我的客户端捕获代码不起作用。我的通信通道出现故障,但没有故障异常。然后我抓住一个.NET ex,说我正在尝试使用故障代理 当我从任何服务方法中抛出错误时,一切都很有效。我可以在我的客户上抓住它们。

是否真的有可能捕获Authenticator发送的错误。当身份验证失败时,将信息性消息传递给客户端的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

客户端,您必须捕获的例外不是FaultException,而是MessageSecurityExceptionusing System.ServiceModel.Security)。

然后,您可以使用您捕获的FaultException的{​​{1}}属性检索InnerException。在你的情况下,你最终会得到类似的东西:

MessagSecurityException

我希望它会有所帮助。