C# WCF:FaultContracts和异常层次结构

C# WCF:FaultContracts和异常层次结构,c#,wcf,faultcontract,C#,Wcf,Faultcontract,我的系统由两个站点组成,它们之间使用WCF进行通信。偶尔,当一个站点调用其对等站点上的操作时会引发异常,我正在尝试确定在这种情况下使用WCF的FaultContracts的最佳方式 在过去的项目中,我习惯于创建一个非平凡的异常层次结构,例如: BaseSystemException CustomerServiceException CustomerNotFoundException BadCustomerNameException Cust

我的系统由两个站点组成,它们之间使用WCF进行通信。偶尔,当一个站点调用其对等站点上的操作时会引发异常,我正在尝试确定在这种情况下使用WCF的FaultContracts的最佳方式

在过去的项目中,我习惯于创建一个非平凡的异常层次结构,例如:

BaseSystemException
    CustomerServiceException
        CustomerNotFoundException
        BadCustomerNameException
        CustomerAlreadyExistsException
        ...
    OrderServiceException
        OrderNotFoundException
        OrderAlreadyExistsException
        ...
然而,在WCF中实现这样的层次结构很快就会变得令人厌烦,因为我必须在自己的FaultContract中指定每个具体的异常类型。现在,由于这两个服务都是同一个系统的一部分,因此不存在泄漏信息/敏感调用堆栈等问题。我希望B在其异常中提供尽可能多的信息,以便A能够做出相应的反应。我应该注意到,在实践中,许多异常都是以相同的方式处理的(操作失败并通知用户),但是在设计我的异常方案时,我不想假设对所有异常都进行相同的处理


有谁能建议一种方法,它不需要为每种异常类型提供FaultContract?有没有更简单的方法?毕竟,这是一个内部接口。我想使用异常层次结构是不是太理想化了?

您考虑过使用异常层次结构吗?这不会破坏您的WCF服务,因此您的客户端可以处理异常

编辑:

由于您希望保留这种类型的异常,我认为使用FaultContracts是没有出路的。我唯一能建议的是合并一些例外情况


e、 g
CustomerNotFoundException
BadCustomerNameException
可能成为
FailedToFetchCustomerException
,然后消息可以传达原因。

简单的FaultException不会传递太多信息-它几乎将任何异常层次结构扁平化为单个异常。如果我想抛出FaultException,那么我需要为所有的T定义FaultContract(T),不是吗?从你的问题来看,我认为你并不真正关心异常是什么,因为你以同样的方式处理它们(操作失败并通知用户)。嗯,我的措辞有点混乱。我的意思是,在实践中,大多数例外都以相同的方式处理,但我仍然希望例外传达尽可能多的信息。我会更新我的问题。很抱歉造成混淆。这正是我所担心的——我将不得不重新设计我的异常层次结构,专门用于WCF。不过,我希望避免这种情况,并以某种方式自动让WCF支持任意的异常层次结构(同样,对于内部服务)。我担心这是野兽的本性。客户端需要知道什么是来自服务器的有效响应。我可以建议大量复制和粘贴吗?;-)