我正在使用C#开发.NET 4.5.1的MVC Web应用程序,而我正在使用一个外部dll库。看来这个库偶尔会抛出AccessViolationException。
我试图用
捕捉异常[HandleProcessCorruptedStateExceptions]
属性并使用
重新启动应用HttpRuntime.UnloadAppDomain();
在catch区块内。 这有点好,但有时这个例外绕过try块和崩溃。
IIS是否通过重新启动来处理崩溃并自动从此异常中恢复应用程序,或者我需要做什么?
答案 0 :(得分:1)
未经检查的异常通常不会导致appdomain卸载或应用池循环。如果您未获得未经检查的例外情况,则可以考虑使用ELMAH来捕获并记录例外情况,以便首先了解它们的原因。
让你的应用程序域定期卸载以处理异常会是一件非常可怕的事情,我建议你先尝试弄清楚它们发生的原因。
答案 1 :(得分:1)
“IIS是否通过重新启动来处理崩溃并自动从此异常中恢复应用程序,或者我需要做什么?”
您应该始终避免崩溃以维护用户体验并避免应用被黑客攻击。 @cobolstinks Elmah建议只会提供堆栈跟踪,如果它可用,那将无济于事。
AccessViolationException与非托管代码相关联,并且您的第三方库似乎是问题的根源,但是您需要在服务器上附加调试器以监视此问题并在发生转储时捕获它。
您应该在服务器上安装DebugDiag并完成Crash-Hang-Analysis报告。
确保您获得最新版本: http://www.microsoft.com/en-gb/download/details.aspx?id=42933
这将在崩溃发生时提供报告,让您比Elmah更深入地了解您的问题。