2012-02-19 128 views
6

我们有一个Azure工作者角色,运行严重的异步工作负载,在IO线程等方面有大量完成。防止未处理的异常破坏Azure工作者角色

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

在非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,这些都不能解决我们的问题。

+0

仍在寻找答案!请加入。 – ionwarp 2012-02-20 23:48:20

回答

0

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

但是你写这个没有用。因为这会在以后出现 - 我将以天蓝色的工作角色运行第三方开源组件 - 我做了一些研究。

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

编辑: 我重新讨论了这个话题:在2.0版本中,它引入了拆除应用程序域,以防线程(不是主线程)遇到类库中的错误。看起来,即使是一个单独的ApplicationDomain也无济于事。正如我所理解的,这个设计应该有助于通过库级别的catch异常来调试隐藏在库中的错误,并适当地处理它们但是什么让我感到恼火 - 如果我们使用我们无法控制的第三方类库,会发生什么?然后,如果我们的问题是小到让供应商及时为我们解决问题,那么我们似乎陷入了僵局。

+0

Marc,如果可能,我正在寻找更好的答案,一个不需要管理appdomains(它不适合我们在被取消时丢失appdomain状态)或创建自己的进程。 – ionwarp 2012-02-20 23:47:59