문제

예외 처리 시스템을 다시 작성하는 스릴 넘치는 작업을 받았습니다. 응용 프로그램 전체의 관점에서 예외를 처리하는 것이 우리가 원하는 것이 아니라고 말하지만, 일반적으로 우리 팀이 우리 팀이 문 밖으로 밀기 위해 필요한 많은 양의 작업에 대해 부족한 경우 피할 수 없습니다. 예외 처리에 대한 세계화 된 솔루션은 여기에 있습니다 :)

나는 어떤 일반적인 솔루션이 존재하는지보기에 좋은 사냥을했습니다. 현재 Application_error 이벤트와 함께 Global.asax를 사용하여 SESTOR.GETLASTERROR ()를 세션 상태에 배치 한 다음 세션 데이터를 검색하고 사람이 읽을 수있는 형식으로 출력되는 다른 페이지로 리디렉션이 호출됩니다. 리디렉션은 또한 SPROC를 호출하여 a) 개발자에게 이메일을 보낸 오류 정보를 신중하게 감사하고 B) 개발자가 볼 수있는 웹 페이지에서 볼 수 있습니다.

내가 한 일을 본 새로운 방법은 app_code의 클래스를 사용하여 ihttpmodule 인터페이스를 사용 하여이 줄을 따라 무언가를 수행하는 것입니다 (이것은 나의 빠른 구현입니다)

Imports Microsoft.VisualBasic

Public Class ErrorModule : Implements IHttpModule

  Public Sub Dispose() Implements System.Web.IHttpModule.Dispose
    ' Not used
  End Sub

  Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
    AddHandler context.Error, AddressOf context_Error
  End Sub

  Public Sub context_Error(ByVal sender As Object, ByVal e As EventArgs)
    Dim ex As Exception = HttpContext.Current.Server.GetLastError

    ' do something with the error
    ' call the stored procedure
    ' redirect the user to the error page

    HttpContext.Current.Server.ClearError()
    HttpContext.Current.Response.Redirect("index.htm")

  End Sub
End Class

내 질문은 Global.asax 이벤트를 사용하는 것 보다이 솔루션의 이점은 무엇입니까? 또한 데이터를 오류 페이지에 전달하는 가장 좋은 방법은 무엇입니까?

편집하다: 위의 코드는 작동합니다.)

편집하다: 또한 httpmodule은 어떻게 무대 뒤에서 작동합니까? 응용 프로그램 시작시 오류 이벤트를 해당 특정 기능에 등록합니까?

업데이트:

훨씬 더 많은 조사에서 IHTTPModule 인터페이스를 사용할 때 세션 데이터를 잡는 것이 실제로 지저분한 것 같습니다. 나는 MS가 특정 시나리오에서 사용하기에 충분한 httpmodule을 성숙했다고 생각하지 않습니다. 세션 데이터와 관련된 이벤트가있을 때까지 사용하기에는 너무 위험합니다.

도움이 되었습니까?

해결책

모듈을 사용하면 쉽게 제거 할 수 있다는 이점이 있습니다.u003ChttpModules> 구성에서.

데이터가 진행되는 한 Server.Transfer 또는 Server.rewritepath - 모든 현재 데이터 (마지막 서버 오류 포함)를 유지합니다.

어떤 이유로 든 마지막 오류가 지우면 오류를 저장할 수 있습니다. httpcontext.items 전송/다시 쓰기 전에 나중에 검색하기 전에.

편집하다: 편집에 응답하여 IHTTPModule은 적절한 이벤트에 첨부됩니다. ihttpmodule.init 구현.

다른 팁

HttpModule 기본적으로 같은 일을합니다 Global.asax. 이벤트 처리를위한보다 재사용 가능하고 독립적 인 모듈로 설계되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top