2011-01-07 58 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中的日志未打开,因为它们的成本。

另一种选择是没有例外。