이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 16308|회답: 0

[ASP.NET] [신화] HttpApplication 객체 Init 메서드는 한 번만 실행되나요?

[링크 복사]
게시됨 2017. 2. 6. 오후 5:29:28 | | | |
저처럼 많은 친구들이 IHttpModule.Init을 애플리케이션 초기화 작업을 할 Application_Start 대안으로 잘못 사용했다는 것을 알게 되었습니다.
하지만 IHttpModule.Init과 Global.asax의 Application_Start 이벤트의 성격은 다르며, IHttpModule.Init은 애플리케이션의 초기화 과정을 직접 대체하는 데 사용할 수 Application_Start ASP.NET 없습니다. 또한 단순히 Init 메서드가 반복적으로 호출되어 프로그램이 재시작되었다는 결론을 내리는 ASP.NET 수도 없습니다.
그 이유는 IHttpModule.Init이 요청 ASP.NET 에 응답할 때 여러 번 호출될 수 있으며, 실제 웹사이트 운영 중에 발생할 가능성이 매우 높기 때문입니다.
왜 IHttpModule.Init이 여러 번 호출되는 이유는, 각 HttpApplication 인스턴스가 한 번에 하나의 요청만 처리할 수 있고, ASP.NET 일정 수의 동시 요청을 지원하기 때문에, HttpApplication 인스턴스가 동시 요청에 대응하기에 부족할 때 여러 번 생성되어 서로 다른 요청에 대응하기 때문입니다. 각 HttpApplication 인스턴스는 새로운 HttpModules 집합을 생성하고 생성 후 Init 메서드를 호출합니다.
Application_Start 최초의 HttpApplication 객체가 생성된 후에만 호출되며, 이후 HttpApplication 인스턴스에서는 이 이벤트가 발생하지 않습니다.
HttpApplication 인스턴스의 재사용이 IHttpModule Init 메서드 사용에 대한 오해의 주요 원인이라고 생각합니다. 왜냐하면 프로그램 디버깅 시 보통 요청이 하나뿐이고, HttpModule Init 메서드를 반복적으로 실행하는 것은 사실상 불가능하기 때문입니다. 실제 웹사이트 운영 환경에서는 동시 요청이 흔하며, Init 메서드가 잘못 사용되면 실제 환경에서 이상한 문제가 발생할 수 있습니다.
구체적인 내용은 MSDN의 "IIS 5.0 및 6.0 ASP.NET 애플리케이션 수명주기 개요"를 참고하시기 바랍니다. 이 문서에는 이미지가 포함되어 있습니다:
Refelector를 사용해 System.Web 어셈블리를 디컴파일하고 IHttpModule.Init 메서드의 호출 관계를 분석할 수도 있습니다.
System.Web.HttpApplicationFactory.GetNormalApplicationInstance 메서드를 얻게 되는데, 이 메서드는 HttpApplication 인스턴스가 어떻게 재사용되고 생성되는지 보여줍니다.
요약하자면, IHttpModule.Init은 단순히 Application_Start를 대체하는 용도로만 사용할 수 없습니다.
비교적 간단한 방법은 정적 불 타입 필드를 초기화 태그로 사용하고, HttpModule에서 프로그램이 요구하는 초기화 후 마크를 true로 설정하며, 다음에는 초기화를 반복하지 않는 것입니다.
하지만 BeginRequest 이벤트 등록 같은 코드는 Init 실행 시 매번 실행되어야 합니다. 이 시점의 HttpModule 인스턴스가 다르기 때문에, 등록 이벤트를 반복하지 않고 정적 초기화 마크업 필드를 판단하면 URL 재작성이 때때로 실행되고 때로는 실행되지 않는 이상한 문제가 발생할 수 있습니다.

[신화] HttpApplication 객체 Init 메서드는 한 번만 실행되나요?

답변: 여러 번 실행될 것입니다!!!!





이전의:InternalsVisibleTo를 사용해 어셈블리에 "friend assembly"를 추가하세요
다음:아름다운 숫자를 뽑는 Java 정규 표현식 대회
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com