처리 되지 않은 예외로 인해 ASP.NET 기반 응용 프로그램을.NET Framework 예기치 않게 종료 된다

기술 자료 번역 기술 자료 번역
기술 자료: 911816 - 이 문서가 적용되는 제품 보기.
참고이 문서는 Microsoft.NET Framework 2.0 및 모든 이후 버전에 적용 됩니다.
모두 확대 | 모두 축소

이 페이지에서

현상

Microsoft ASP.NET 기반 응용 프로그램이 Microsoft.NET Framework 2.0 이상 버전에 기본 제공 되는 처리 되지 않은 예외가 throw 되 면 응용 프로그램이 예기치 않게 종료 됩니다. 이 문제가 발생 하는 문제를 이해 하는 데 필요한 예외 정보가 없는 응용 프로그램 로그에 기록 됩니다.

그러나, 다음과 유사한 이벤트 메시지가 시스템 로그에 기록 될 수 있습니다.

이벤트 종류: 경고
이벤트 원본: W3SVC
이벤트 범주: 없음
이벤트 ID: 1009
날짜: 2005 년 9 월 28 일
시간: 3시 18분: 11
PM 사용자: n/A
IIS 서버 컴퓨터:
설명:
응용 프로그램 풀 'DefaultAppPool' 프로세스를 갑자기 종료 되었습니다. 프로세스 id는 '2548'입니다. 프로세스 종료 코드는 '0xe0434f4d'.

또한 응용 프로그램 로그에 다음과 유사한 이벤트 메시지가 기록 될 수 있습니다.

이벤트 종류: 오류
이벤트 원본:.NET 2.0 런타임 오류 보고
이벤트 범주: 없음
이벤트 ID: 5000
날짜: 2005 년 9 월 28 일
시간: 오후 3시 18분: 02
사용자: N/A
IIS 서버 컴퓨터:
설명:
EventType clr20r3 w3wp.exe P1, P2 6.0.3790.1830, P3 42435be1 P4 app_web_7437ep-9, P5 0.0.0.0, P6 433b1670 P7 9, P8, P9 다음과 같은 P10 닐.

원인

이 문제는.NET Framework 2.0 이상 버전에서 처리 되지 않은 예외에 대 한 기본 정책이 변경 되었기 때문에 발생 합니다. 기본적으로 처리 되지 않은 예외에 대 한 정책은 작업자 프로세스를 종료 하는.

Microsoft.NET Framework 1.1 및 Microsoft.NET Framework 1.0에서에서 관리 되는 스레드의 처리 되지 않은 예외는 무시 되었습니다. 예외를 catch 하도록 디버거를 추가 하지 않는 한 문제가 있는지 알기 어렵습니다 있습니다.

ASP.NET은.NET Framework 2.0 이상 버전에서 처리 되지 않은 예외에 대 한 기본 정책을 사용합니다. 처리 되지 않은 예외가 throw 되 면 ASP.NET 기반 응용 프로그램이 예기치 않게 종료 됩니다.

이 동작은 요청 컨텍스트에서 발생 하는 예외에는 적용 되지 않습니다. 이러한 유형의 예외 처리 및 HttpException 개체로 래핑한 계속 합니다. 요청 컨텍스트에서 발생 하는 예외는 작업자 프로세스가 종료 되지 않습니다. 그러나 타이머 스레드 또는 콜백 함수에서의 예외와 같이 요청 컨텍스트 외부의 처리 되지 않은 예외 인해 작업자 프로세스가 종료 됩니다.

해결 방법

이 문제를 해결 하려면 다음 방법 중 하나를 사용 합니다.

방법 1

예외 정보가 응용 프로그램 로그에 기록 되도록 IHttpModule 개체에 대 한 소스 코드를 수정 합니다. 기록 된 정보를 다음이 포함 됩니다.
  • 가상 디렉터리 경로에 있는 exceptionoccurred
  • 예외 이름
  • 메시지
  • 스택 추적
IHttpModule 개체를 수정 하려면 다음과이 같이 하십시오.

참고 이 코드는 응용 프로그램 로그에 오류 이벤트 유형과 이벤트 소스의 ASP.NET 2.0.50727.0에 메시지를 기록 합니다. 모듈을 테스트 하려면 메서드를 사용 하 는 동안 처리 되지 않은 예외를 throw 하는 메서드를 호출 하는 ASP.NET 페이지를 요청 합니다.
  1. NamedUnhandledExceptionModule.cs 파일에 다음 코드를 넣습니다.
    using System;
    using System.Diagnostics;
    using System.Globalization;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading;
    using System.Web;
     
    namespace WebMonitor {
        public class UnhandledExceptionModule: IHttpModule {
    
            static int _unhandledExceptionCount = 0;
    
            static string _sourceName = null;
            static object _initLock = new object();
            static bool _initialized = false;
    
            public void Init(HttpApplication app) {
    
                // Do this one time for each AppDomain.
                if (!_initialized) {
                    lock (_initLock) {
                        if (!_initialized) { 
    
                            string webenginePath = Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "webengine.dll"); 
    
                            if (!File.Exists(webenginePath)) {
                                throw new Exception(String.Format(CultureInfo.InvariantCulture,
                                                                  "Failed to locate webengine.dll at '{0}'.  This module requires .NET Framework 2.0.", 
                                                                  webenginePath));
                            } 
    
                            FileVersionInfo ver = FileVersionInfo.GetVersionInfo(webenginePath);
                            _sourceName = string.Format(CultureInfo.InvariantCulture, "ASP.NET {0}.{1}.{2}.0",
                                                        ver.FileMajorPart, ver.FileMinorPart, ver.FileBuildPart);
    
                            if (!EventLog.SourceExists(_sourceName)) {
                                throw new Exception(String.Format(CultureInfo.InvariantCulture,
                                                                  "There is no EventLog source named '{0}'. This module requires .NET Framework 2.0.", 
                                                                  _sourceName));
                            }
     
                            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);
     
                            _initialized = true;
                        }
                    }
                }
            }
    
            public void Dispose() {
            }
    
            void OnUnhandledException(object o, UnhandledExceptionEventArgs e) {
                // Let this occur one time for each AppDomain.
                if (Interlocked.Exchange(ref _unhandledExceptionCount, 1) != 0)
                    return;
    
                StringBuilder message = new StringBuilder("\r\n\r\nUnhandledException logged by UnhandledExceptionModule.dll:\r\n\r\nappId=");
    
                string appId = (string) AppDomain.CurrentDomain.GetData(".appId");
                if (appId != null) {
                    message.Append(appId);
                }
                
    
                Exception currentException = null;
                for (currentException = (Exception)e.ExceptionObject; currentException != null; currentException = currentException.InnerException) {
                    message.AppendFormat("\r\n\r\ntype={0}\r\n\r\nmessage={1}\r\n\r\nstack=\r\n{2}\r\n\r\n",
                                         currentException.GetType().FullName, 
                                         currentException.Message,
                                         currentException.StackTrace);
                }           
    
                EventLog Log = new EventLog();
                Log.Source = _sourceName;
                Log.WriteEntry(message.ToString(), EventLogEntryType.Error);
            }
    
        }
    }
  2. UnhandledExceptionModule.cs 파일의 followingfolder을 저장.
    다음 C:\Program 8\VC Visual Studio
  3. Microsoft Visual Studio 2005 CommandPrompt를 엽니다.
  4. 형식 sn.exe-k key.snk및 thenpress를 입력 합니다.
  5. 형식 csc /t: library /r:system.web.dll,system.dll/keyfile:key.snk UnhandledExceptionModule.cs및 다음 pressENTER.
  6. 형식 gacutil.exe /ifUnhandledExceptionModule.dll를 누른 다음 ENTER 키를 누릅니다.
  7. 형식 ngen installUnhandledExceptionModule.dll를 누른 다음 ENTER 키를 누릅니다.
  8. 형식 gacutil /lUnhandledExceptionModuleenter 키를 눌러 UnhandledExceptionModule 파일 thestrong 이름을 표시 하 고 있습니다.
  9. 9. YourASP.NET 기반 응용 프로그램의 Web.config 파일에 다음 코드를 추가 합니다.
    <add name="UnhandledExceptionModule" 
    	type="WebMonitor.UnhandledExceptionModule, <strong name>" />

방법 2

처리 되지 않은 예외 정책을.NET Framework 1.1에서과.NET Framework 1.0에서 발생 하는 기본 동작으로 변경 합니다.

참고 기본 동작을 변경 하는 것은 좋지 않습니다. 예외를 무시 하면 응용 프로그램 리소스 누수가 발생 하 고 잠금이 중단 수 있습니다.

이 기본 동작을 사용 하려면 다음 폴더에 있는 Aspnet.config 파일에 다음 코드를 추가 합니다.
%WINDIR%\Microsoft.NET\Framework\v2.0.50727
<configuration>
    <runtime>
        <legacyUnhandledExceptionPolicy enabled="true" />
    </runtime>
</configuration>

현재 상태

이 동작은 의도적으로 설계되었습니다.

추가 정보

.NET Framework 2.0의 변경 내용에 대 한 자세한 내용은 다음 Microsoft Developer Network (MSDN) 웹 사이트로 이동.
http://msdn2.microsoft.com/en-us/netframework/aa570326.aspx

속성

기술 자료: 911816 - 마지막 검토: 2013년 10월 7일 월요일 - 수정: 2.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft .NET Framework 4.5
  • Microsoft .NET Framework 4.0
  • Microsoft .NET Framework 3.0
  • Microsoft .NET Framework 2.0
키워드:?
kbtshoot kbfix kbprogramming kbprb kbmt KB911816 KbMtko
기계 번역된 문서
이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.
이 문서의 영문 버전 보기:911816

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com