2009-11-26 36 views
0

我在控制檯應用程序中託管WCF服務(只是暫時的,稍後我將使用管理員帳戶遷移到服務中)。經過幾個小時的執行,我從控制檯(HOST)得到嚴重錯誤,我的服務停止工作。跟蹤錯誤的最佳方法是什麼? 我曾嘗試下面的代碼來記錄錯誤,但它似乎代碼不捕獲錯誤。我想我需要在WCF服務中處理錯誤,而不是在主機應用程序中。 有什麼建議嗎?WCF服務中的嚴重錯誤

namespace ConsoleApplication1 
{ 
    //test host project 
    class Program 
    { 
     static void Main(string[] args) 
     {      

      using (var serviceHost = new ServiceHost(new ServicePdf())) 
      { 
       try 
       {      
        serviceHost.Open(); 
        Console.WriteLine("Service was succesfully hosted. Press [enter] to exit..."); 
        Console.ReadLine();      
       } 
       catch (Exception ex) 
       {      
        MethodToLogError(ex); 
        Console.WriteLine("Error occured while hosting service. Press [enter] to exit..."); 
        Console.WriteLine(ex.Message); 
        Console.ReadLine(); 
       } 
      } 
     } 
    } 
} 

問候, 托馬斯

回答

1

您可以趕上你的主機中的任何未處理的異常(無論是從主線程或任何其他線程)通過suscribing到AppDomain.UnhandledException事件。

static void Main(string[] args) 
     { 
      //... 
      AppDomain.CurrentDomain.UnhandledException += exceptionHandler; 
      //... 
} 

static void exceptionHandler(object sender, UnhandledExceptionEventArgs args) 
{ 
     Exception e = (Exception) args.ExceptionObject; 
     Console.WriteLine("An unhandledexception occurred. Time to die. " + e); 
} 

這樣你就可以記錄異常。儘管如此,沒辦法從它那裏優雅地恢復過來。

0

如果在幾個小時後發生這種情況,這聽起來像是某種資源泄漏。使用Process Explorer,檢查應用程序的內存使用情況;超過幾百兆字節通常意味着一個問題。

追蹤這些本身就是一門藝術;通常需要與Windebug進行會話。它通常是一個未發佈的資源(在WCF服務中,檢查數據庫代碼)或事件處理程序的問題。