2009-07-10 160 views
2

我們的WCF服務偶爾產生一個工作線程來處理客戶端不關心的事情。工作線程不會將任何狀態報告給客戶端。事實上,在線程完成時,服務可能已經將結果返回給客戶端。處理WCF中的線程異常

最近這些後臺線程之一導致了一個異常。異常未處理,所以IIS崩潰。

我可以修復這個特殊的異常,但將來有人可能會添加一些導致另一個意外異常的代碼。我想在未來防止這種崩潰。

我知道System.Windows.Forms應用程序可以通過執行Application.ThreadException來處理線程異常。有什麼類似的,我可以做一個WCF服務?或者,如果Application.ThreadException是要走的路,我將如何將它與WCF服務掛鉤?

AppDomain.UnhandledException的MSDN文檔說它不能防止崩潰。文檔ServiceModel.AsynchronousThreadExceptionHandler表明它僅適用於WCF線程。

至少,我想在崩潰之前從異常中抓取堆棧跟蹤,但避免將來的崩潰完全是理想的。

再一次,讓我強調這不是我想作爲WCF故障返回給客戶端的異常。

回答

1

既然你不知道是什麼導致了異常,唯一明智的做法是崩潰。你不知道服務處於什麼狀態,你可以通過繼續讓事情變得更糟。

請記住,IIS將爲您重新啓動服務,乾淨,並可能正常工作。

+1

請說的downvote的原因。如果不知道他們有什麼問題,答案不會有所改善。 – 2009-07-10 17:10:15

+0

我同意這一點...如果你有一個預期的例外,你應該接近它的起源。如果它意外,它應該允許應用程序崩潰。 – 2009-07-10 18:10:20

1

如果你正在產卵的線程,你應該總是確保他們有異常警衛。 AppDomain處理未處理的異常只提供了一種記錄和追蹤錯誤的方法,但它不會阻止主機崩潰。