如何在Windows Azure(工作器)角色中捕获未处理的exception
我正试图在我的工作角色中捕获所有未处理的exception。 我尝试将一个try
– catch
块放入Run()
方法(如此处所示 ),但没有成功。
public override void Run() { try { base.Run(); } catch (Exception ex) { Trace.TraceError("Unhandled Exception: {0}", ex); throw ex; } }
该角色承载WCF服务,因此Run()
方法中没有其他逻辑。 是否有另一种可能性来捕获此级别的exception?
更新1澄清问题:角色self托管WCF服务(在OnStart()
初始化),其中某些操作是后台操作。 当调用该服务并且该方法抛出意外exception时,我想抓住它将其写入日志。
解决方案:显然它就像在普通的C#应用程序中一样:只需向UnhandledException
事件添加一个处理程序,就像这样
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
在角色的OnStart()
内部。 我是如此专注于Azure,我认为这毕竟不起作用,我甚至没有尝试过:-)
正如我在问题中已经更新的那样,为了完整起见,这里作为答案:
显然它就像在普通的c#应用程序中一样:只需像这样向UnhandledException
事件添加一个处理程序
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
在角色的OnStart()
内部。
捕获将捕获所有exception。
你再扔它,这样就不会被抓住。
您也在进行日志记录,但在Azure中默认情况下不会打开日志,因为它们会花费。
另一种选择是没有例外。