2011-04-29 4 views
1

웹 응용 프로그램이 시작된 후 및 웹 요청 중에 한 번만 또는 몇 번만 실행하려고한다고 가정 해 봅니다.IHttpModule 초기화 범위에서 HttpApplication 이벤트 처리기를 바인딩 해제 할 수없는 이유는 무엇입니까?

public class WebApp : HttpApplication 
{ 
    public override void Init() 
    { 
     base.Init(); 

     this.BeginRequest += new EventHandler(this.OnFirstBeginRequest); 
    } 

    private void OnFirstBeginRequest(object sender, EventArgs e) 
    { 
     // do some action and if everything is OK, unbind this handler, 
     // because we need it executed only once at the first web request 
     this.BeginRequest -= new EventHandler(this.OnFirstBeginRequest); 
    } 
} 

다음 예외가 발생됩니다

이벤트 핸들러는 IHttpModule을 초기화하는 동안 같이 HttpApplication 이벤트에 바인딩 할 수 있습니다.

+0

왜 Global.asax와 Application_Start를 사용하지 않습니까? – Xaqron

+0

어제 비슷한 질문이 생겼습니다 : [IHttpModule 초기화 중 이벤트 처리기를 HttpApplication 이벤트에만 바인딩 할 수있는 이유는 무엇입니까?] (http://stackoverflow.com/q/2781346/102112). – Alex

+0

Xaqron, 왜 그래야합니까? 그러면 코드 샘플이 복잡 해지고 내 질문의 주제가 다른 방향으로 바뀌게됩니다. –

답변

2

그것은, 응용 프로그램에 대한 첫 번째 요청에 대한 몇 가지 코드를 실행하는 HttpApplication 인스턴스에서 이벤트 핸들러를 사용하는 것이 이해가되지하는 새로운 HttpApplication 인스턴스가 그 이벤트와 코드를 리 바인드 것 만들어 질 때마다 때문에 핸들러가 다시 실행될 경우

복수 HttpApplication 인스턴스는 ASP.NET 작업자 프로세스에 의해 만들어집니다. 성능을 위해 풀링되지만 웹 응용 프로그램에 대한 서비스 요청은 HttpApplication 개입니다.

Here's a pretty good article on the subject.

+0

그래, 정확히 그 이유는 그것의 일을 마친 Init() 메서드 안에 등록 된 이벤트 처리기를 UNBIND해야합니다. ASP.NET이 왜 그렇게 할 수 없는지에 대한 의문이 남아 있습니다. –

관련 문제