views:

1417

answers:

4

I have an ASP.NET application and in the golbal.asax ' Application Error Event, i am calling a method to trace/log the error.I want to use the session variable content here .I used the below code

   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);

}

I am getting an error in the line of code where i am accessing the session variable.Visual Studio is telling that "Session is not available in this context"

How to get rid of this ? Any thoughts?

Thanks in advance

A: 

Maybe the error happened in a HttpModule before the session state is evaluated?

chris166
+3  A: 

I think applicaiton error is specific for the whole application and a session is specific for the user. Maybe you can throw your own Exception where you save the information from the session inside your exception.

Magnus Bertilsson
Yes. Applicationxxxx events is specific for your application, not for a session.
Icebob
+1  A: 

It should work if you do it like this:

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

Because that is what I do myself.

What exactly do you mean with: Visual Studio is telling that "Session is not available in this context"? Do you get a compiler error or a run-time exception?

You could try to be more defensive and test if there actually is a current HttpContext and a Session:

if (HttpContext.Current != null &&
    HttpContext.Current.Session != null) {
  strError = HttpContext.Current.Session["trCustomerEmail"]
}
Remko Jansen
The same code i used.it is a RunTime Exception I got
Shyju
Can you post the exception message you get when accessing the Session and the exception message that you are trying to handle?
Remko Jansen
A: 

You may try this:

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

then you must use is like this:

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

but if the exception was thrown before the Session object is loaded, it will be null

Jan Remunda