2009-07-22 40 views
8

Tôi có một ứng dụng ASP.NET và trong Global.asax 'Application Error Event, tôi gọi một phương thức để theo dõi/đăng nhập lỗi. Tôi muốn sử dụng phiên làm việc nội dung biến ở đây .Tôi sử dụng mã dưới đâyASP.NET: Truy cập phiên biến trong global.asax

void Application_Error(object sender, EventArgs e) 
{ 
    //get reference to the source of the exception chain 
    Exception ex = Server.GetLastError().GetBaseException(); 

    //log the details of the exception and page state to the 
    //Windows 2000 Event Log 
    GUI.MailClass objMail = new GUI.MailClass(); 
    string strError = "MESSAGE: " + ex.Message + "<br><br><br>" + "SOURCE: " + ex.Source + "<br>FORM: " + Request.Form.ToString() + "<br>QUERYSTRING: " + Request.QueryString.ToString() + "<br>TARGETSITE: " + ex.TargetSite + "<br>STACKTRACE: " + ex.StackTrace; 
    if (System.Web.HttpContext.Current.Session["trCustomerEmail"] != null) 
    { 
     strError = "Customer Email : " + Session["trCustomerEmail"].ToString() +"<br />"+ strError; 
    } 

    //Call a method to send the error details as an Email 
    objMail.sendMail("[email protected]", "[email protected]", "Error in " + Request.Form.ToString(), strError, 2); 
} 

tôi nhận được một lỗi trong dòng mã nơi tôi truy cập vào phiên variable.Visual Studio được nói rằng

"phiên không có sẵn trong ngữ cảnh này "

Làm cách nào để loại bỏ điều này? Có suy nghĩ gì không?

Cảm ơn trước

+0

Lỗi được đưa ra từ đâu? Trong mã aspind beind (sự kiện nào?), Hoặc trong trình xử lý http, v.v ...? Điều này có thể xác định xem việc sử dụng đối tượng phiên có hợp lệ hay không – JonoW

Trả lời

11

Nó sẽ làm việc nếu bạn làm điều đó như thế này:

strError = System.Web.HttpContext.Current.Session["trCustomerEmail"] 

Bởi vì đó là những gì tôi làm bản thân mình.

Chính xác bạn có ý gì với: Visual Studio đang nói rằng "Phiên không có sẵn trong ngữ cảnh này"? Bạn có gặp lỗi trình biên dịch hoặc ngoại lệ thời gian chạy không?

Bạn có thể thử là phòng thủ và thử nghiệm nhiều hơn nếu có thực sự là một HttpContext hiện tại và một phiên:

if (HttpContext.Current != null && 
    HttpContext.Current.Session != null) { 
    strError = HttpContext.Current.Session["trCustomerEmail"] 
} 
+0

Cùng mã tôi đã sử dụng.it là ngoại lệ RunTime tôi nhận được – Shyju

+0

Bạn có thể đăng thông báo ngoại lệ mà bạn nhận được khi truy cập Phiên và thông báo ngoại lệ mà bạn đang cố gắng xử lý không? –

3

Tôi nghĩ lỗi applicaiton là cụ thể cho toàn bộ ứng dụng và phiên dành riêng cho người dùng. Có lẽ bạn có thể ném ngoại lệ của riêng bạn, nơi bạn lưu thông tin từ phiên bên trong ngoại lệ của bạn.

+0

Có. Sự kiện Applicationxxxx dành riêng cho ứng dụng của bạn, không phải cho một phiên. – Icebob

1

Bạn có thể thử này:

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

sau đó bạn phải sử dụng là như thế này :

context.Request.QueryString.ToString() 
context.Session["key"] = "fasfaasf"; 

nhưng nếu ngoại lệ được ném trước khi đối tượng Phiên được tải, nó sẽ không có giá trị

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