WCF将异常传递给客户端。

10

我有一个可能会抛出异常的服务。我希望能够在客户端捕获异常。我主要关心的异常是 DbUpdateExceptionInvalidOperationException。对于其他异常,只需要知道已经抛出了异常即可。

如何在客户端捕获异常?


为了搜索者的利益,本文还提供了有关转换异常/FaultExceptions 的良好信息-https://msdn.microsoft.com/en-us/library/ff649840.aspx - JsAndDotNet
2个回答

12

如果你的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)
{
   ...
}

5

定义一个FaultContract,以便任何客户端都可以监听它,并且只包含你想公开暴露的异常细节。

阅读此文以获取更多信息:MSDN文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接