WCF捕获类型T或基本类型的故障异常

Shi*_*iji 6 wcf exception-handling

我们有一个带有WCF层的系统.

WCF服务可以抛出各种FaultExceptions,这些是类型的例外:

FaultException<MyStronglyTypedException>
Run Code Online (Sandbox Code Playgroud)

所有强类型异常都从基本异常继承.

public class MyStronglyTypedException : MyBaseException
Run Code Online (Sandbox Code Playgroud)

我可以捕获FaultException,但是我无法访问FaultException的Detail属性.

我想要抓住的是:

FaultException<MyBaseException>
Run Code Online (Sandbox Code Playgroud)

但这似乎不可能.

有没有办法可以访问FaultException的Detail属性,而不会捕获每个强类型的异常?

mar*_*c_s 5

如果您希望能够捕获FaultException<MyBaseException>客户端代码中的强类型,则必须使用该类型的FaultContract属性修饰服务方法:

[ServiceContract]
interface IYourService
{
   [OperationContract]
   [FaultContract(typeof(MyBaseException))]
   ResponseType DoSomethingUsefulHere(RequestType request);
}
Run Code Online (Sandbox Code Playgroud)

如果您没有"声明"那些要捕获强类型FaultContract<T>异常的特定类型,WCF会将所有服务器端错误转换为通用FaultContract实例.