如何在Windows Azure(工作器)角色中捕获未处理的异常

时间:2011-01-07 14:44:27

标签: c# exception-handling azure

我正在尝试捕获我的工作角色中所有未处理的异常。我尝试将try - catch块放入Run()方法(如建议的here),但没有成功。

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

该角色托管WCF服务,因此Run()方法中没有其他逻辑。是否还有其他可能在此级别捕获异常?

更新1 澄清问题:角色self托管WCF服务(在OnStart()中初始化),其中一些操作是后台操作。当调用该服务并且该方法抛出意外异常时,我想抓住它将其写入日志。

解决方案: 显然它就像在普通的C#应用​​程序中: 只需向UnhandledException事件添加处理程序,就像这样

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

在角色的OnStart()内。我非常专注于Azure,我认为这毕竟不起作用,我甚至没有尝试过: - )

2 个答案:

答案 0 :(得分:14)

正如我在问题中已经更新的那样,这里为了完整性而作为答案:

显然它就像在普通的c#应用程序中一样:只需像这样添加UnhandledException事件的处理程序

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

在角色的OnStart()内。

答案 1 :(得分:0)

捕获将捕获所有异常。

你再次扔它,这样就不会被抓住。

此外,您正在进行日志记录,但在Azure中默认情况下不会启用日志,因为它们会花费。

另一种选择是没有例外。