我有一个可能会抛出异常的服务。我希望能够在客户端捕获异常。我感兴趣的主要例外是DbUpdateException
和InvalidOperationException
。对于其余的异常,足以知道异常已被抛出。
如何在客户端中捕获异常?
答案 0 :(得分:11)
如果您的WCF服务抛出异常,则默认情况下它将作为FaultException
来到客户端。您可以将服务配置为在故障中包含异常详细信息,如下所示:
<serviceDebug includeExceptionDetailInFaults="true" />
但你可能不想这样做,向客户公开内部实现细节永远不是一个好主意。
如果要区分不同的服务故障,可以创建自己的类,并将其注册为服务将引发的故障。您可以在服务合同级别执行此操作:
public interface YourServiceContract
{
[FaultContract(typeof(YourFaultClass))]
[OperationContract(...)]
YourServiceResponseClass YourServiceOperation(YourServiceRequestClass request);
}
您用于错误契约的类不必实现任何操作(就像您必须为自定义Exception
执行的操作一样),它只会包含在通用FaultContract
对象中。然后,您可以在客户端代码中捕获此信息,如下所示:
try
{
// service operation
}
catch (FaultException<YourFaultClass> customFault)
{
...
}
catch (FaultException generalFault)
{
...
}
答案 1 :(得分:4)
定义FaultContract,以便任何客户端都可以监听它并仅包含您要公开公开的异常详细信息。
阅读本文以获取更多信息:MSDN Docs