我有一个带有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发送的错误。当身份验证失败时,向客户端传递信息性消息的最佳方式是什么?
客户端,必须捕获的异常不是FaultException
,而是MessageSecurityException
(using System.ServiceModel.Security
)。
然后,您可以使用捕获的MessagSecurityException
的InnerException
属性检索您的FaultException
。在你的情况下,你会得到类似的东西:
catch (MessageSecurityException e)
{
FaultException fault = (FaultException) e.InnerException;
MessageBox.Show(faultException.Message);
}
我希望这会有所帮助。