1

IIS7/Windows 2008에서 실행되는 ASP.NET (3.5 SP1) 응용 프로그램이 있습니다. 우리는 Global.asax에서 Application_Start 및 Application_End 이벤트를 잡았습니다. 또한 앱에서 WCF 서비스를 호스팅하고 ServiceHostFactory를 통해 OnOpening 및 OnClosing 이벤트를 트래핑합니다. 따라서 우리는 응용 프로그램 시작 및 중지, 예정 또는 예약 취소에 대한 알림을 보장한다고 생각했습니다.IIS가 아직 실행중인 응용 프로그램을 "시작"하게되는 이유는 무엇입니까?

며칠 전 우리 애플리케이션은 '시작'/ '실행 중'상태에서 Application_Start 이벤트를 포착했습니다.

아니요 Application_End 이벤트가 Application_Start보다 우선합니다 (또는 경쟁 조건을 고려하면 몇 분 후에도 계속 진행됩니다).

우리의 첫 번째 생각은 우리의 응용 프로그램이 실제로 조용히 추락하여 종료되었다는 것입니다. 실제로 일어난 일은 새로운 App Domain으로 인바운드 요청을 처리하는 것이었지만 기존 App Domain의 백그라운드 스레드 (ThreadPool 스레드에서 많은 작업을 수행함)는 며칠 동안 실행되었습니다. IISRESET을 사용하여 해당 작업을 종료했습니다.

원래 AppDomain이 끝나지 않아서 Application_End가 실행되지 않는다고 추측하지만 Application_Start가 시작된 이유는 무엇입니까?

ASP.NET에서이 준 셧다운 + AppDomainStartup 메커니즘이 어떻게 작동하는지 설명하는 팁이나 문서를 찾고 있습니다. 사전에

감사합니다,

하워드 호프만

답변

0

는 이러한 상황을 초래할 수있는 응용 프로그램 풀 재활용에 대해 학습하십시오. IIS가 풀을 재활용하도록 결정하면 먼저 새 작업자 프로세스를 초기화 (Application_Start가 차례로 호출 됨)되고 이전 (Application_End)이 종료됩니다.

위의 분석 결과가 올바른지 이해하려면 로그에 프로세스 ID가있는 일부 애플리케이션 수준 로깅을 추가하는 것이 좋습니다.

ASP.NET 개발자의 경우 IIS에 대해 자세히 학습하는 것이 좋습니다.

+0

궁금한 점은 여러 Application_start 호출과 동일한 동작을 보아서 pid를 로깅한다는 것과 동일합니다. 따라서 동일한 w3wp 프로세스가 이미 다시 게재중인 앱을 시작하기로 결정합니다. –

+0

http://blogs.msdn.com/b/tess/archive/2008/11/06/troubleshooting-appdomain-restarts-and-other-issues-with-etw-tracing.aspx –

+0

나는 AppPool은 결코 재활용되지 않도록 설정되었습니다. AppPool의 모든 재활용 설정은 0이었습니다. 실제로 발생 된 사실을 증명할 수는 없었습니다. 왜 App Pool의 충돌이 발생 했습니까? 우리는 나중에 파일을 "뮤텍스"로 사용하기 위해 Application_Start/End 메커니즘을 변경했습니다. App-Start가 파일을 생성하고 App-End가 삭제되고 App-Start가 파일이 존재하면 즉시 종료됩니다. 그래서 우리는 최소한 그것이 다시 발생하면 더블 스타트 케이스를 감지 할 수 있습니다. 그로부터 2 년 동안 생산되었지만 ... –

관련 문제