我想抛出自定义异常,如一些错误消息作为WCF Web服务的异常,并在客户端应用程序中尝试接收此异常错误消息调用Web服务方法 .
如何从WCF Web服务抛出自定义异常并在客户端收到相同的异常错误 .
WCF Web服务方法:
public bool Read()
{
if (IsUserValid() == false)
{
throw new Exception("Authorized user");
}
}
在客户端
try
{
_client.Read();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return;
}
结果:始终抛出错误消息作为例外**即 .
“System.ServiceModel.FaultException:由于内部错误,服务器无法处理请求 . 有关错误的更多信息,请在服务器上启用IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute或来自配置行为)以便发送将异常信息返回给客户端,或根据Microsoft .NET Framework 3.0 SDK文档打开跟踪并检查服务器跟踪日志 . “
这是代码抛出异常但不返回与从WCF Web服务抛出的异常错误相同的错误消息
请建议
2 回答
要实现这一点,您需要做两件事:
在界面中定义故障 Contract (WCF Contract )
将异常抛弃为故障异常
在WCF中,您不应该抛出标准的.NET异常 - 这与WCF的潜在可互操作性质相反 - 毕竟,您的客户端可能是没有.NET异常概念的Java或PHP客户端 .
相反,您需要抛出FaultExceptions(这是WCF的标准行为) .
如果您想传达有关出错的更多信息,请查看通用
FaultException<T>
类型:SERVER:
或者(由@MortenNorgaard建议):
CLIENT :
您应该将
InvalidUserFault
声明为WCF数据 Contract ,并定义哪些成员可以使用该类型返回(即错误代码,错误消息等) .然后你应该用你可能抛出的错误来装饰你的服务方法:
当然,“quick'n'dirty”hack只是简单地定义服务器在其FaultExceptions中返回异常细节:
然后你可以检查FaultException的
.Detail
以查找服务器上发生的实际异常 - 但同样:这更像是一个开发时间而不是真正的解决方案 .渣