【发布时间】:2010-04-05 13:51:47
【问题描述】:
我注意到,例如,如果您执行 throw new InvalidCastException,客户端的通道状态将出现故障。但是如果你抛出新的 FaultException,客户端的通道状态就会打开。
出于好奇,为什么一个通道有故障而另一个没有?
【问题讨论】:
我注意到,例如,如果您执行 throw new InvalidCastException,客户端的通道状态将出现故障。但是如果你抛出新的 FaultException,客户端的通道状态就会打开。
出于好奇,为什么一个通道有故障而另一个没有?
【问题讨论】:
FaultException 是 WCF 中的一个特例。这意味着在服务端发生了一些错误,但同时也不是通道故障。这是有道理的,因为您可以使用 FaultContractAttribute 将此信息嵌入到合同中,以公开合同的预期内容。
其他例外情况在 WS 世界中是不可翻译的。异常是特定于技术的抽象,每个技术堆栈对该抽象都有不同的表示(或者在某些情况下,根本没有)。
话虽如此,当在服务器端抛出不是错误异常的异常时,WCF 运行时将其视为灾难性的,并且通道必须 是错误的,因为不知道你是否可以继续。
但是,使用 FaultException 意味着您对抛出它的原因以及底层通道是否受到影响有一定的预见性。
【讨论】: