2014-09-29 36 views
2

我正在使用C#编写适用于.NET 4.5.1的MVC web应用程序,我正在使用一个外部dll库。似乎这个库偶尔会抛出AccessViolationException。ASP.NET MVC应用程序是否在AccessViolationException中自动重启?

我试图捕获异常与

[HandleProcessCorruptedStateExceptions] 

属性及与

HttpRuntime.UnloadAppDomain(); 

重启catch块中的应用程序。 这工作有点好,但有时这种异常旁路尝试阻止和崩溃。

IIS是否处理崩溃并通过重新启动自动从此异常中恢复应用程序,或者是否有我需要做的事情?

+0

IIS应该从故障中恢复并回收,并使站点备份。确保使用web.config中定义的机器键来限制最终用户出现问题。 – 2014-09-29 20:05:45

+0

至于我,你需要找到为什么外部库失败,并尝试避免这种情况,因为重新启动应用程序池是非常不友好的WebApp用户,因为它会导致会话丢失\延迟由于应用程序域重新启动 – 2014-09-29 20:21:30

回答

1

未经检查的异常通常不会导致appdomain卸载或应用程序池循环。如果您获得未经检查的例外情况,则可以考虑使用ELMAH来捕获并记录例外情况,以便您可以明白为什么它们首先发生。

让你的appdomain周期性地卸载来“处理异常”将是一件非常可怕的事情,我会建议试图弄清楚为什么他们首先发生。

+0

损坏的状态异常不是典型的可以忽略的未经检查的异常,因为它们可能会破坏应用程序池进程的状态,并且Microsoft不建议执行具有损坏状态的应用程序。 – 2014-09-29 20:19:28

1

“IIS是否处理崩溃并通过重新启动自动从此异常中恢复应用程序,或者是否有我需要做的事情?

您应该始终避免崩溃以保持用户体验并避免您的应用被黑客入侵。 @cobolstinks Elmah的建议只会提供堆栈跟踪,如果它可用,这将无济于事。

AccessViolationException与非托管代码相关联,并且您的第三方库似乎是问题的根源,但是您需要在服务器上附加调试程序以监视此问题并在发生时捕获转储。

您应该在服务器上安装DebugDiag并完成Crash-Hang-Analysis报告。

确保您获得最新版本: http://www.microsoft.com/en-gb/download/details.aspx?id=42933

当发生崩溃时,这将提供一个报告,让您更深入了解您的问题比ELMAH可以。

+0

如何获得堆栈跟踪没有帮助?如果没有其他人可以将其带回图书馆所有者进行进一步诊断,或者可以通过错误报告提交。 – cobolstinks 2014-09-29 23:28:58

+0

同意,Elmah捕获的堆栈跟踪可能会提供一些错误的上下文,如果它按预期起泡。它可能不会,即使它做了,它也不会提供将在崩溃挂起分析中呈现的详细应用程序状态信息。当发生错误时,供应商肯定会问你的应用程序的状态。 – 2014-09-30 20:26:36

相关问题