WCF:FaultContracts和异常层次结构

时间:2011-03-24 12:39:45

标签: c# wcf faultcontract

我的系统由两个站点组成,使用WCF在它们之间进行通信。有时,当一个站点在其对等体上调用操作时会抛出异常,并且我正在尝试确定在这种情况下使用WCF的FaultContracts的最佳方法是什么。

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

BaseSystemException
    CustomerServiceException
        CustomerNotFoundException
        BadCustomerNameException
        CustomerAlreadyExistsException
        ...
    OrderServiceException
        OrderNotFoundException
        OrderAlreadyExistsException
        ...

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

任何人都可以建议一种不需要每个异常类型的FaultContract的方法吗?有没有更简单的方法?毕竟这是一个内部接口。我是否过于理想主义,想要使用异常层次结构?

1 个答案:

答案 0 :(得分:0)

您是否考虑投掷FaultException?这不会破坏您的WCF服务,因此您的客户端可以处理异常。

编辑:

由于您希望保留异常类型,我认为没有办法使用FaultContracts。我唯一可以建议的是巩固你的一些例外。

例如CustomerNotFoundExceptionBadCustomerNameException可能会成为FailedToFetchCustomerException,然后消息就会传达原因。