WCF有异常传递给客户端

Rya*_*yan 9 wcf exception

我有一个可能会抛出异常的服务.我希望能够在客户端捕获异常.我感兴趣的主要例外是DbUpdateExceptionInvalidOperationException.对于其余的异常,足以知道异常已被抛出.

如何在客户端捕获异常?

Gra*_*ark 11

如果您的WCF服务抛出异常,则默认情况下它将作为a来到客户端FaultException.您可以将服务配置为在故障中包含异常详细信息,如下所示:

<serviceDebug includeExceptionDetailInFaults="true" />
Run Code Online (Sandbox Code Playgroud)

但是您可能不想这样做,将内部实现细节暴露给客户端永远不是一个好主意.

如果要区分不同的服务故障,可以创建自己的类,并将其注册为服务将引发的错误.您可以在服务合同级别执行此操作:

public interface YourServiceContract
{
   [FaultContract(typeof(YourFaultClass))]
   [OperationContract(...)]
   YourServiceResponseClass YourServiceOperation(YourServiceRequestClass request);
}
Run Code Online (Sandbox Code Playgroud)

您用于故障合同的类不必实现任何操作(就像您必须为自定义一样Exception),它将被包装在一个通用FaultContract对象中.然后,您可以在客户端代码中捕获此信息,如下所示:

try
{
   // service operation
}
catch (FaultException<YourFaultClass> customFault)
{
   ...
}
catch (FaultException generalFault)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)


Hen*_*ric 5

定义一个FaultContract,以便任何客户端都可以监听它,并仅包含您想要公开公开的异常详细信息。

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