防止未处理的异常删除Azure工作者角色

时间:2012-02-19 18:56:56

标签: .net azure azure-worker-roles

我们有一个Azure辅助角色,可以运行大量异步工作负载,在IO线程等上有很多完成。

有时,我们不拥有的异步回调会发生未处理的异常。这反过来导致角色失败。

在非Azure ASP.NET应用程序中,我们可以通过在aspnet.config中启用旧的未处理异常策略来避免这种情况,如下所示:

<configuration> 
  <runtime> 
    <legacyUnhandledExceptionPolicy enabled="1" /> 
  <runtime>
<configuration>

有没有办法为Azure辅助角色执行相同的操作?我们试图将它放在角色项目的app.config中,但是这不起作用(因为我们可能不得不以某种方式将它放入WaWorkerHost.exe.config中)。

我们知道AppDomain.CurrentDomain.UnhandledExceptionApplication.SetUnhandledExceptionModeHow to catch an unhandled exception in Windows Azure (Worker) Role这些并不能解决我们的问题。

1 个答案:

答案 0 :(得分:0)

请阅读您的主题,因为我对webrole有同样的体验。现在我添加了您的代码段并检查是否会再次遇到此错误。对AppDomain类进行了一些研究:http://msdn.microsoft.com/en-us/library/system.appdomain.aspx。事实上,我正在寻找未处理的例外政策但却没有找到它。但我发现事件“UnhandledException”http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

但你写道这不起作用。因为这会在以后打击我 - 我将在一个天蓝色的工作者角色中运行第三方开源组件 - 我做了一些研究。

我将尝试为第三个pary代码创建一个新的AppDomain - 如果发生异常,它将崩溃/卸载新创建的AppDomain而不是当前我运行代码。另一个解决方案可能是创建一个新的过程,我想更多的工作。

编辑: 我重新讨论了这个主题:在2.0版本中引入了拆除应用程序域,以防线程(非主线程)在类库中遇到错误。似乎即使是单独的ApplicationDomain也无济于事。据我所知,这个设计应该通过在库级别捕获异常来帮助调试隐藏在库中的错误并适当地处理它们。但令我恼火的是 - 如果我们使用我们无法控制的第三方类库会发生什么?然后,如果我们的问题很小,供供应商在我们需要的时间内解决它,那么我们似乎陷入困境。