2010-04-05 144 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