【发布时间】:2013-05-13 17:47:38
【问题描述】:
我试图在我的工作角色中捕获所有未处理的异常。我尝试将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
澄清问题:角色自己托管 WCF 服务(在 OnStart() 中初始化),其中一些操作是后台操作。当调用服务并且该方法抛出意外异常时,我喜欢捕获它并将其写入日志。
解决方案:
显然它就像在普通的 C# 应用程序中一样:
只需像这样向UnhandledException 事件添加一个处理程序
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
在角色的OnStart() 内。我太专注于 Azure,以至于我认为这毕竟行不通,我什至没有尝试过 :-)
【问题讨论】:
-
试试这个简单地抛出
new Exception("Testing");的虚拟工作者角色 -
该角色承载一个 WCF 服务,因此 Run() 方法中实际上没有任何内容。应该提到这一点。
-
@gumo:然后问问你自己,为什么你试图捕捉的异常是不可捕捉的,而只是简单的
Exception(以及任何从Exception派生的类)是不可捕捉的?我会给你几分钟时间自己回答。 -
@John:感谢您的帮助,但这不是重点。
-
@John:可能是任何异常,例如角色中的后台操作抛出的 IOException。我认为它不能在 Run() 中被捕获,因为它没有在那里被调用。这是否回答你的问题?再次感谢。
标签: c# exception-handling azure