2010-08-11 7 views
0

HttpContext.Current.Request 개체에 액세스하려고하면 예외가 발생합니다.IHttpModule에서 "이 컨텍스트에서 요청을 사용할 수 없습니다."

나는 l1, l2l3의 반응을 본 적이 ... 그래서 ... 제 질문은 다음과 같습니다 IHttpModules는 세계에서 무엇을 위해

지금은?

내가 전화를 걸 때마다 방문하는 모듈을 개발하여 액세스 한 URL, 사용자 IP 주소 등을 기록 할 수있게했지만 지금은 더 이상 할 수없는 것 같습니다. IIS7. 해결 방법이 있습니까? ("클래식 모드"로 전환하는 것 외에).

alt text http://userserve-ak.last.fm/serve/126/24432467.jpg

건배.

+0

귀하의 질문에 대한 답변이 아니지만 대안입니다. 'System.Web.Ui.Page' 클래스를 상속받은'BasePage' 클래스를 만들지 마십시오. 이제 모든 페이지는'BasePage'에서 상속받을 수 있습니다.그런 다음 거기에서 로깅을하는'BasePage'에 자신의'Page_Load' 이벤트를 추가 할 수 있습니다. –

답변

3

언제 그렇게하고 있습니까? 모듈 이벤트에 있습니까? 통합 풀에서도 완벽하게 수행 할 수 있어야합니다. 통합 모드에서 실행될 때 ASP.NET이 IIS에 후킹하여 "더 많은 일등급"이되는 방식에 변화가 생깁니다. 이것은 특정 이벤트가 전에 발생한다는 것을 의미합니다. 예를 들어 Application_Start는 실제 요청의 컨텍스트 외부에서 실행됩니다. BeginRequest는 이제 IIS가 인증되기 전에 발생하기 때문에 BeginRequest에 Windows 인증 ID가 필요하다고 예상되는 예가 있습니다. 과거에는 그렇지 않았습니다.

응용 프로그램이 이전의 잘못된 동작에 의존하는 경우에도 여전히 AppPool을 클래식 모드로 변경할 수 있으며 정상적으로 작동합니다.

당신은 요청 등 은 또한, 나는 그는 해시에 추가로 찾아 초래하기 때문에 HttpContext.Current 사용에 대한 추천이 BeginRequest, EndRequest 이벤트, PostAuthorizeRequest, 같은 특정한 어떤 통지의 요청을 잡을 수 있어야한다 테이블과 일반적으로 예를 들어 당신이 BeginRequest을 처리하는 경우, 그래서 당신이 할 수있을 것입니다, 특별히 모듈의 맥락에서, 다른 방법으로 직접 컨텍스트를 얻을 수 있습니다 :

HttpApplication application = (HttpApplication)sender; 
    HttpContext context = application.Context; 

을하고 조회를 저장합니다 .

BeginRequest 및 EndRequest를 처리하는 모듈을 구현해야하며 잘해야합니다.

0

나는이 질문을 원래 답글이 아니기 때문에 올렸지 만, "해결 방법"을 찾고 있다는 것을 알았습니다. 여기에 제 아이디어가 있습니다.

/App_Code/BasePage.vb

Public Class BasePage : Inherits System.Web.UI.Page 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     ''# Do all your logging here 
    End Sub 
End Class 

/Default.aspx.vb

Partial Class _Default : Inherits BasePage 
    ''# This is simply your code behind for each page (notice it inherits BasePage) 
    ''# You can still have your Page_Load events along with custom methods in here, 
    ''# and it will not affect the logging portion of your app. 
End Class 

기본적으로 당신이 동일한 작업을 수행하는 하나의 클래스를 만드는 일을하는지 어떤 페이지가로드 되더라도 모든 페이지를로드합니다. 그런 다음 응용 프로그램의 각 페이지는 활성화하기 위해 BasePage 클래스에서 상속받습니다.

+0

http://converter.telerik.com을 사용하여 C#을 사용하는 경우 C#으로 변환 할 수 있습니다. –

+0

정말로 감사하지만 ASP.NET UI 클래스를 사용하지 않습니다. P 감사합니다! – vtortola

+0

무엇을 사용하고 계십니까? –

관련 문제