我注意到,例如,如果您执行 throw new InvalidCastException,客户端的 channel 状态就会出错。但是如果抛出new FaultException,客户端的 channel 状态是打开的。
出于好奇,一个人对 channel 进行故障而另一个人却没有的原因是什么?
最佳答案
FaultException是WCF中的特例。它的意思是表明服务端发生了一些错误,但与此同时,不会对 channel 造成故障。这是有道理的,因为您可以使用 FaultContractAttribute 将此信息嵌入到契约(Contract)中。揭示契约(Contract)的预期内容。
其他异常在 WS 世界中并不是真正可翻译的。异常是一种特定于技术的抽象,每个技术栈都有对该抽象的不同表示(或者在某些情况下,根本没有)。
也就是说,当服务器端抛出一个不是故障异常的异常时,WCF 运行时会将其视为灾难性的,并且 channel 必须 出错了,因为不知道您是否可以继续。
但是,使用 FaultException 意味着您对抛出它的原因以及底层 channel 是否受到影响有一些先见之明。
关于c# - Wcf异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2578697/