C# ASP.NET MVC应用程序是否在AccessViolationException时自动重新启动?

C# ASP.NET MVC应用程序是否在AccessViolationException时自动重新启动?,c#,asp.net,access-violation,C#,Asp.net,Access Violation,我正在使用C#和一个外部dll库为.NET 4.5.1开发MVC web应用程序。这个库似乎偶尔抛出AccessViolationException 我试图用计算机捕捉异常 [HandleProcessCorruptedStateExceptions] 属性,然后使用 HttpRuntime.UnloadAppDomain(); 内挡块。 这在某种程度上工作得很好,但有时此异常会绕过try块并崩溃 IIS是否通过重新启动来处理崩溃并自动从该异常中恢复应用程序,或者我需要做些什么?未检查的异常

我正在使用C#和一个外部dll库为.NET 4.5.1开发MVC web应用程序。这个库似乎偶尔抛出AccessViolationException

我试图用计算机捕捉异常

[HandleProcessCorruptedStateExceptions]
属性,然后使用

HttpRuntime.UnloadAppDomain();
内挡块。 这在某种程度上工作得很好,但有时此异常会绕过try块并崩溃


IIS是否通过重新启动来处理崩溃并自动从该异常中恢复应用程序,或者我需要做些什么?

未检查的异常通常不会导致appdomain卸载或应用程序池循环。如果你得到了未检查的异常,你可以考虑使用捕捉和记录异常,这样你就可以看到为什么它们会首先出现。 定期卸载appdomain以“处理异常”将是一件非常可怕的事情,我建议您首先尝试找出它们发生的原因。

“IIS是否通过重新启动来处理崩溃并自动从该异常中恢复应用程序,或者我需要做些什么?”

您应该始终避免崩溃,以维护用户体验,并避免您的应用受到黑客攻击。 @Cobolboonds Elmah建议仅在可用的情况下提供stacktrace,这不会有帮助

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

您应该在服务器上安装DebugDiag并完成崩溃挂起分析报告

确保获得最新版本:


这将在崩溃发生时提供报告,让您比Elmah更深入地了解您的问题。

IIS应该从故障中恢复,并对站点进行回收和旋转备份。请确保您正在使用web.config中定义的machinekey来限制出现这种情况时的最终用户问题。至于我,您需要找到外部LIB失败的原因,并尝试避免这种情况,因为重新启动应用程序池对WebApp用户非常不友好,因为它会导致会话丢失\n由于应用程序域重新启动而延迟损坏的状态异常不是典型的可忽略的未检查异常,因为它们会损坏应用程序池进程的状态,Microsoft不建议在损坏状态下执行应用程序。获取stacktrace怎么会没有帮助?如果没有其他原因,他/她可以将其带回库所有者进行进一步诊断,或者在错误报告中提交。同意,Elmah captured stacktrace可能会提供一些错误的上下文,如果它如预期的那样出现。它可能不会,即使它这样做了,它也不会提供崩溃挂起分析中显示的详细应用程序状态信息。当错误发生时,供应商肯定会询问您的应用程序的状态。