2009-06-06 2 views
21

누군가가 사용자 지정 클래스의 생성자가 에서 파생 된 이유를 설명 할 수 있습니까? 응용 프로그램 시작시 HttpApplication이 여러 번 호출됩니다.HttpApplication 생성자가 여러 번 호출되는 이유

내 코드 구조는 다음
- Global.asax에 나의 글로벌 클래스는 에서 CustomApp 클래스를 파생한다.
일 - CustomApp 클래스는 글로벌 클래스가 시작시 생성

같이 HttpApplication 클래스에서 파생,하지만 난 생성자에서 중단 점을 배치 할 때, 그것은 여러 번 호출됩니다! 내가 응용 프로그램 클래스의 인스턴스가 하나만 있어야한다고 생각 했나요?

내가 틀렸어?

UPD : 웹 서버가 실제로 같은 시간에 오는 여러 요청을 처리하기 위해 여러 같이 HttpApplication 인스턴스를 만들 수 있습니다. 이것은 자손 HttpApplication의 생성자에 중단 점을 배치 할 때 특히 분명합니다. 몇 가지 요청이 클라이언트 (http 콘텐츠, CSS 파일 등)에서 보류 될 것이고 각 요청을 처리하기 위해 웹 서버가 HttpApp의 새 인스턴스를 생성합니다. 따라서 응용 프로그램 초기화 논리를 작성할 때이 점에 유의하십시오.

+0

이 동작을 나타내는 줄 바꿈 코드 스 니펫을 게시 할 수 있습니까? –

답변

15

ASP.NET 런타임이 응용 프로그램 도메인 당 두 개 이상의 HttpApplication을 만들 수 있다고 생각합니다. 따라서 HttpApplication.Init와 Ctor는 두 번 이상 호출 될 수 있습니다.

초기화 코드가 한 번만 실행되게하려면 응용 프로그램별로 한 번만 호출되는 Application_Start 이벤트를 사용해야합니다.

+0

HttpApplication 클래스를 웹 사이트 외부에 두어야하기 때문에 Applcation_Start에 연결할 수있는 이벤트가 있습니까? –

+1

Global.asax.cs에서 메소드'Applcation_Start'를 구현하면 시작시 자동으로 유선 연결되고 호출됩니다. http://msdn.microsoft.com/en-us/library/ms178473.aspx – mckamey

+0

이벤트 핸들러를 'Application_Start'에 등록하면 'AuthenticateRequest' 또는'AcquireRequestState'와 같은 이벤트가 발생하지 않습니다.)'. 'HttpApplication'에 대한 오버라이드 인'Init()'에 등록하고 싶을 수도 있습니다. – Manfred

6

global.asax in ASP.NET 게시물을 보시기 바랍니다. 이유는 HttpApplication의 인스턴스가 여러 개있는 이유입니다. 기본적으로 특별한 수영장과 정상 수영장이 있습니다. 일반 풀에는 요청에서 사용되는 HttpApplication의 인스턴스가 포함됩니다 (각 요청에는 자체 HttpApplication 인스턴스가 있음). 특수 풀에는 응용 프로그램 수준 이벤트 (예 : Application_Start, Application_Error)에 사용되는 HttpApplication 개체가 포함됩니다.

+0

매우 흥미 롭습니다, 감사합니다! – Andy

관련 문제