我正在尝试捕获我的工作角色中所有未处理的异常。我尝试将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,我认为这毕竟不起作用,我甚至没有尝试过: - )
答案 0 :(得分:14)
正如我在问题中已经更新的那样,这里为了完整性而作为答案:
显然它就像在普通的c#应用程序中一样:只需像这样添加UnhandledException
事件的处理程序
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
在角色的OnStart()
内。
答案 1 :(得分:0)
捕获将捕获所有异常。
你再次扔它,这样就不会被抓住。
此外,您正在进行日志记录,但在Azure中默认情况下不会启用日志,因为它们会花费。
另一种选择是没有例外。