我注意到,例如,如果您抛出一个新的InvalidCastException,则客户端的 channel 状态将出现故障。但是,如果抛出新的FaultException,则会打开客户端的 channel 状态。

出于好奇,一个导致 channel 故障而另一个没有 channel 故障的原因是什么?

最佳答案

FaultException是WCF中的一种特殊情况。这是为了表明服务端发生了一些错误,但同时又不对 channel 造成故障。这是有道理的,因为您可以使用FaultContractAttribute将此信息嵌入到契约(Contract)中,以暴露契约(Contract)可以预期的内容。

其他异常(exception)在WS世界中并不是真正可翻译的。异常是特定于技术的抽象,并且每个技术堆栈都有该抽象的不同表示形式(或在某些情况下完全没有)。

话虽如此,当在服务器端抛出不是错误异常的异常时,WCF运行时将其视为灾难性的,并且 channel 必须发生故障,因为尚不清楚是否可以继续。

但是,使用FaultException,这意味着您对引发该错误的条件以及底层 channel 是否受到影响有一定的了解。

关于c# - WCF异常处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2578697/

10-12 00:12
查看更多