2011-01-07 61 views
9

我試圖捕獲我的worker角色中的所有未處理的異常。我嘗試將try - catch塊放入Run()方法(建議爲here),但沒有成功。如何在Windows Azure中捕獲未處理的異常(Worker)角色

public override void Run() 
{ 
    try 
    { 
    base.Run(); 
    } 
    catch (Exception ex) 
    { 
    Trace.TraceError("Unhandled Exception: {0}", ex);  
    throw ex; 
    } 
} 

該角色託管WCF服務,因此在Run()方法中沒有其他邏輯。在這個層面上是否有另一種可能性來捕捉異常?

更新1 要澄清的問題:角色的自承載WCF服務(在OnStart()初始化),其中一些操作是後臺操作。當服務被調用並且該方法引發意外的異常時,我喜歡將其寫入日誌。

解決方案: 顯然,這就像一個普通的C#應用​​程序: 只需添加一個句柄到UnhandledException事件這樣

AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 

角色的OnStart()內。我很專注於Azure,我認爲這畢竟不行,我甚至沒有嘗試過:-)

+0

嘗試使用虛擬工作者角色,它只是拋出`新的異常(「測試」);` – 2011-01-07 14:46:35

回答

14

前面已經更新了我的問題,是爲了完整性的緣故作爲回答:

顯然它就像一個普通的C#應用​​程序:只需添加一個句柄到UnhandledException事件這樣

AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 

內角色的OnStart()

0

捕獲將捕獲所有異常。

你再次拋出,以免被抓到。

此外,您還在進行日誌記錄,但默認情況下Azure中的日誌未打開,因爲它們的成本。

另一種選擇是沒有例外。