2010-04-29 27 views
5

在WCF中,是否有捕獲未處理異常的事件或方法,還是需要在任何方法中放置try/catch?在WCF中捕獲未處理的異常

+0

爲什麼你想趕上未處理的異常?你想用他們做什麼?你想在客戶端或服務中這樣做嗎? – 2010-04-29 00:40:08

+0

一個目標可能是將異常捕獲/記錄到WCF診斷跟蹤之外的標準日誌文件。 – Jeremy 2011-10-18 14:06:58

+0

到目前爲止你找到它了嗎?我正在嘗試做類似的事情,但沒有成功 – Ton 2016-01-26 19:42:38

回答

7

是,創建一個實現IErrorHandler接口的類:

允許實施者來控制故障消息返回給調用者和任選地執行自定義錯誤處理,例如日誌記錄。

+1

這是非常複雜的,你可以給一個例子嗎? 和,需要它到服務器端。不是客戶。 謝謝 – zvi 2010-04-29 10:34:43

+1

對此問題的回答很晚:IErrorHandler實現未在WCF數據服務中使用。在您的DataService 中,重寫HandleException。 如果你是自主託管,也考慮處理: AppDomain.CurrentDomain.UnhandledException和TaskScheduler.UnobservedTaskException – 2013-03-15 12:41:22

0

你應該做內部和外部的TRY/Catch Blocks。

所以第一個方法開始嘗試

然後如果有什麼在是露出方法的值返回給客戶端的方法,另一種方法則默認內拋出,你一般漁獲物。

我總是用記錄在我的catch塊,告訴管理員哪裏出了問題,但我有贈品外鍵鎖返回有點像價值「請除我們Appogies的WCF.Blah服務已經失敗,請檢查服務器日誌完整的細節」

這種方式,你有錯誤處理,日誌記錄和好消息給你的客戶..

public class Service1 : IService1 
    { 
    public string GetData(int value) 
    { 
     try 
     { 
      return somemethod(value); 
     } 
     catch(Exception ex) 
     { 
      LoggingHelper.Log(ex); 
      return "Please Except our Appogies the WCF.Blah service has failed. Please review the server logs for complete details"; 
     } 
    } 
+1

我需要超過1個wcf服務方法。 有沒有類似於global.asa中的「onerror」事件,在ASP.NET中捕獲所有未處理的異常? – zvi 2010-05-01 22:49:29