1

我有一个带有 wsHttpBinding 的 WCF 服务。一切正常,但是我在从我的自定义身份验证器发送的客户端上捕获错误时遇到了问题。
我使用来自 msdn 的自定义身份验证器代码:
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 发送的故障。当身份验证失败时,向客户端传递信息性消息的最佳方式是什么?

4

1 回答 1

1

在客户端,您必须捕获的异常不是 aFaultException而是MessageSecurityException( using System.ServiceModel.Security)。

然后你可以用你捕获FaultExceptionInnerException属性来检索你的。MessagSecurityException在你的情况下,你最终会得到类似这样的东西:

catch (MessageSecurityException e)
{
    FaultException fault = (FaultException) e.InnerException;
    MessageBox.Show(faultException.Message);
}

我希望它会有所帮助。

于 2015-05-12T17:13:15.220 回答