2010-11-02 36 views
14

Tôi muốn biết phần nào của vòng đời yêu cầu ASP.NET xảy ra sau khi lỗi được xử lý thông qua sự kiện HttpApplication.Error. Cụ thể, sự kiện nào được liệt kê tại http://msdn.microsoft.com/en-us/library/bb470252.aspx#Stages cháy sau khi có lỗi? Tôi biết rằng EndRequest vẫn còn cháy, và tôi nghi ngờ rằng PreSendRequestHeaders và PreSendRequestContent lửa là tốt, nhưng ngoài những tôi không có ý tưởng.Sự kiện vòng đời ASP.NET nào sẽ cháy sau HttpApplication.Error?

Điều đó có phụ thuộc vào thời điểm xảy ra lỗi trong vòng đời không? Liệu nó phụ thuộc vào việc tôi gọi Server.ClearError() trong xử lý lỗi?

Tôi đang đặt câu hỏi này bởi vì tôi không biết liệu tôi có nên gọi HttpApplication.CompleteRequest() từ trình xử lý lỗi của tôi hay không.

+1

Thật tệ khi không ai trực tiếp trả lời câu hỏi là ** sự kiện nào ** kích hoạt sau khi lỗi được xử lý. –

Trả lời

0

Sự kiện LogRequest được nâng lên ngay cả khi xảy ra lỗi. Bạn có thể cung cấp trình xử lý sự kiện cho sự kiện LogRequest để cung cấp nhật ký tùy chỉnh cho yêu cầu. để biết thêm chi tiết về http://msdn.microsoft.com/en-us/library/system.web.httpapplication.logrequest.aspx

Nếu ứng dụng của bạn tạo ra lỗi tùy chỉnh, hãy tắt thông báo lỗi mặc định do ASP.NET tạo ra bằng cách gọi hàm ClearError trong sự kiện HttpApplication.Error.

0

Tôi không kiểm tra, nhưng tôi nghĩ điều đó phụ thuộc.

Có thể xảy ra lỗi trong bất kỳ sự kiện trang nào (Init/Load/PreRender). Sau khi lỗi được nâng lên, nếu bạn xóa lỗi, vòng đời của trang sẽ tiếp tục từ đó.

0

Ngoại lệ làm tăng sự kiện Lỗi có thể được truy cập bằng một cuộc gọi đến phương thức GetLastError. Nếu ứng dụng của bạn tạo ra đầu ra lỗi tùy chỉnh, hãy chặn thông báo lỗi mặc định được tạo bởi ASP.NET bằng một cuộc gọi đến phương thức ClearError.

3

Cách tốt nhất là để bắt máy chủ lỗi cuối cùngngoại lệ appdomain.

Tất cả chúng có thể được thực hiện trong tệp Global.asax.cs.

Kiểm tra các bước sau:

1- Trong Global.asax.cs, gặp lỗi cuối cùng và ghi nhật ký.

protected void Application_Error(object sender, EventArgs e) 
    { 
     Exception exception = Server.GetLastError(); 
     Server.ClearError(); 
     log.Error("Application Error caught in Global ", exception); 
    } 

2- Thêm một event handler cho sự kiện trên UnhandledException AppDomain, điều này sẽ được bổ sung vào Application_Start:

protected void Application_Start(object sender, EventArgs e) 
    { 
     //.... 
     AppDomain.CurrentDomain.UnhandledException 
       += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
    }  

3- Và đây là việc thực hiện CurrentDomain_UnhandledException:

void CurrentDomain_UnhandledException(object sender, 
                UnhandledExceptionEventArgs e) 
    { 
     if (e != null) 
     log.Error("Domain Unhandled Exception: ", e.ExceptionObject as Exception); 
    } 

Chúc mừng mã hóa :)

Các vấn đề liên quan