2010-04-05 130 views
5

我注意到,如果你做了一个新的InvalidCastException异常,例如客户端的通道状态是错误的。但是,如果抛出新的FaultException,则会打开客户端的通道状态。Wcf异常处理

好奇心,一个人故障的原因是什么,另一个没有?

回答

12

FaultException是WCF中的特例。这意味着在服务方面发生了一些错误,但同时又不会影响渠道。这很有道理,因为您可以使用FaultContractAttribute将此信息嵌入到合同中,以揭示合同中可以预期的内容。

其他例外在WS世界中是不可翻译的。例外情况是特定于技术的抽象,每个技术堆栈都具有不同的抽象表示(或者在某些情况下根本不存在)。

这就是说,当一个异常即故障例外是在服务器侧抛出,可以看出由WCF运行时作为灾难性的,并且信道必须属于缺陷,因为它不知道如果你可以继续或不继续。

但是,使用FaultException,这意味着您对于为什么会抛出以及底层通道是否受到影响等情况有一定的预见性。

+0

感谢您的解释。我在想,只是想确保它是正确的 – pdiddy 2010-04-05 14:04:14

+1

@pdiddy:没问题,很多人没有意识到WCF并不是要将.NET中的所有东西直接映射到WS世界,还有一些非常真实的事情,你必须知道它。 – casperOne 2010-04-05 14:04:41