2014-09-29 4 views
2

C#을 사용하는 .NET 4.5.1 용 MVC 웹 응용 프로그램에서 작업 중이며 하나의 외부 DLL 라이브러리를 사용하고 있습니다. 이 라이브러리가 때때로 AccessViolationException을 던집니다. ASP.NET MVC 앱이 AccessViolationException에서 자동으로 다시 시작하나요?

나는

[HandleProcessCorruptedStateExceptions] 

속성으로 예외를 catch하고 catch 블록 내부에

HttpRuntime.UnloadAppDomain(); 

와 응용 프로그램을 다시 시작했습니다. 이 방법은 다소 효과가 있지만 때로는이 예외를 우회하여 블록 및 충돌을 피할 수 있습니다.

IIS가 충돌을 처리하고 다시 시작하여이 예외에서 응용 프로그램을 자동으로 복구합니까? 필요한 조치가 있습니까?

+0

IIS가 오류에서 복구 중이며 사이트를 다시 순환하고 회전시켜야합니다. 이 경우 최종 사용자 문제를 제한하기 위해 web.config에 정의 된 시스템 키를 사용하고 있는지 확인하십시오. –

+0

저로서는 외부 libs가 실패한 이유를 알아야하며, 응용 프로그램 풀을 다시 시작하면 웹 응용 프로그램 사용자에게 매우 불친절합니다. 세션을 다시 시작하면 세션이 \ lags 손실 될 수 있습니다. –

답변

1

일반적으로 체크되지 않은 예외로 인해 appdomain이 언로드되거나 앱 풀이 순환하지 않습니다. 확인되지 않은 예외가 발생하는 경우 ELMAH을 사용하여 예외를 포착하고 로그를 남겨서 예외가 발생하는 이유를 확인할 수 있습니다.

"예외 처리"를 위해 appdomain을 정기적으로 언로드하는 것은 매우 끔찍한 일이 될 것입니다. 왜 그들이 처음에 발생하는지 파악하려고하는 것이 좋습니다.

+0

손상된 상태 예외는 아닙니다. 일반적으로 확인되지 않은 예외는 무시할 수 있습니다. 응용 프로그램 풀 프로세스의 상태가 손상 될 수 있으며 손상된 상태로 응용 프로그램을 실행하지 않는 것이 좋습니다. –

1

"IIS가 충돌을 처리하고 다시 시작하여이 예외에서 앱을 자동으로 복구합니까? 아니면 필요한 조치가 있습니까?"

사용자 환경을 유지하고 앱이 해킹 당하지 않도록 항상 충돌을 방지해야합니다. @cobolstinks Elmah 제안은 도움이되지 않는 스택 트레이스 만 제공합니다.

AccessViolationException이 관리되지 않는 코드와 관련되어 있고 타사 라이브러리가 문제의 원인 인 것으로 나타나지만이 문제를 감시하고 발생할 때 덤프를 캡처하려면 디버거를 서버에 연결해야합니다.

서버에 DebugDiag를 설치하고 충돌 분석 분석 보고서를 완료해야합니다. http://www.microsoft.com/en-gb/download/details.aspx?id=42933

이것은 충돌이 발생하면 보고서를 제공 할 수 ELMAH보다 문제에 당신에게 훨씬 더 많은 통찰력을 줄 것이다 :

는 최신 버전을 다운로드해야합니다.

+0

어떻게 stacktrace가 도움이되지 않습니까? 다른 사람이 더 이상 진단을 위해 도서관 주인에게 되돌릴 수 없거나 버그 보고서로 제출할 수 있습니다. – cobolstinks

+0

동의어, Elmah는 stacktrace가 예상 한 것처럼 거품을 내면 오류의 일부 컨텍스트를 제공 할 수 있습니다. 그래도 크래시 걸림 분석에 표시되는 자세한 애플리케이션 상태 정보는 제공하지 않습니다. 오류가 발생하면 공급 업체는 앱 상태를 묻습니다. –