我有一个可能会抛出异常的服务。我希望能够在客户端捕获异常。我主要关心的异常是 DbUpdateException
和 InvalidOperationException
。对于其他异常,只需要知道已经抛出了异常即可。
如何在客户端捕获异常?
如果你的WCF服务抛出异常,默认情况下,客户端会接收到FaultException
。你可以配置你的服务在Faults中包含异常详情,方法如下:
<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)
{
...
}