作爲標題,我應該在服務器端捕獲異常嗎?如果我不在WCF服務器端捕獲異常,它會崩潰服務器端應用程序?
回答
我想,因爲我不知道你說的是哪一個分割的例外在下列2種類型:
WCF通信異常:
這些異常可能不會麻煩你的服務器端應用程序。所以你不必擔心它們。您只需在客戶端應用程序中小心。
應用程序異常:
(顯然)你需要抓住他們,否則你的服務器端應用程序會崩潰。
是的,你應該 - 無論如何!
首先,服務器端的未捕獲的異常將「錯誤」通道,例如,將客戶端和服務器之間的通道置於「恐慌模式」 - 不再有可能的呼叫,您需要關閉(或中止)來自客戶端的通道並重新建立連接。其次,當然,未處理的異常會使服務器代碼崩潰 - 但是,默認情況下,您的WCF調用應該是「每次調用」,也就是說,每次請求都會得到一個全新的,新鮮的實例化你的服務器類的對象,並且在調用結束時,它將被拋棄。所以這真的不是那麼糟糕...
在WCF中有一個名爲IErrorHandler
的接口,您可以在服務器端實現接口。它提供的是捕捉任何異常的能力,並將它們變成「可互操作的」SOAP錯誤,這些錯誤將通過通信通道發回,而不會導致它進入恐慌模式。
有幾個IErrorHandler
實現那裏基本上允許您動態地插入作爲服務行爲 - 無論是在服務器的配置,或在您的服務類代碼作爲屬性。查看this blog post這些樣本之一(還有更多 - 只是谷歌爲他們)。
預期有例外例外;最好是將它們冒泡爲故障(WCF術語 - 查找FaultException
),但無論哪種方式,該異常都會簡單地轉換到網絡上並由客戶端處理。 WCF客戶端真的不喜歡得到異常,這通常是一個代理終端(客戶端應該清理他們現有的代理並啓動一個新的會話來獲得新的會話等)。但是你的服務器進程(減去borked會話)將繼續運行並提供服務請求。
當然也有非常討厭和服務器發生嚴重異常的一個類別 - 堆棧溢出,內存,線程中止等,但沒有太多可以做那些反正!
- 1. WCF超時異常服務器端
- 2. 服務器端WCF(.svc)服務在異常後停止工作
- 3. 如果服務器宕機,TCPsending會崩潰應用程序
- 4. 客戶端 - 服務器應用程序崩潰
- 5. 客戶端斷開後服務器應用程序崩潰
- 6. ASP.NET圖表崩潰在服務器端
- 7. WCF服務:應用程序崩潰
- 8. WCF服務器端異步調用
- 9. 客戶端應用程序崩潰導致服務器崩潰? (C++)
- 10. Android TCP客戶端/服務器崩潰
- 11. 客戶端 - 服務器應用程序空指針異常
- 12. 如何捕獲WCF服務端點
- 13. 如何捕獲從WCF服務端
- 14. 客戶端異步WCF Vs服務器端異步WCF
- 15. 在Rails應用程序中分離後端服務器和前端服務器?
- 16. WCF異步服務器端處理
- 17. 異步客戶端服務器WCF
- 18. 趕上服務器端異常在Windows Phone的異步服務
- 19. DWR異常處理在服務器端
- 20. 在硒中捕獲服務器異常?
- 21. WCF:從服務器端
- 22. WCF服務器端事件
- 23. WCF緩存服務器端
- 24. 我如何從iPhone應用程序獲得服務器端
- 25. 服務器端Adobe AIR應用程序
- 26. Django服務器端應用程序
- 27. 服務器端應用程序
- 28. 服務器客戶端應用程序
- 29. 客戶端/服務器應用程序
- 30. 客戶端 - 服務器應用程序
@marc_s:我寫了一個使用WCF的客戶端 - 服務器應用程序,它在過去六個月的生產中(沒有停機時間)。我沒有在服務器中編寫一行代碼來捕獲** WCF通信異常**。但是,我確實使用了每次通話模式,並且我很想知道如果我將其更改爲「每會話」或「單身人士」模式,我將不得不在服務器中進行更改... – Hemant 2009-11-27 10:14:40
雖然從我閱讀的任何時間(我在學習WCF的時候),只有「per-call」是有道理的。 – Hemant 2009-11-27 10:16:34