2009-07-22 22 views
8

Tengo una aplicación ASP.NET y en el evento de error de aplicación Global.asax, estoy llamando a un método para rastrear/registrar el error.Quiero usar la sesión contenido de la variable .I aquí utiliza el código de abajoASP.NET: variable de sesión de acceso en 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); 
} 

estoy recibiendo un error en la línea de código donde yo soy el acceso a la sesión variable.Visual Studio está diciendo que

"la sesión no está disponible en este contexto "

¿Cómo deshacerse de esto? ¿Alguna idea?

Gracias de antemano

+0

¿De dónde sale el error? En el código aspx beind (¿qué evento?), O en un manejador de http, etc. Esto puede determinar si el uso del objeto de sesión es válido o no – JonoW

Respuesta

11

Se debe trabajar si lo haces de esta manera:

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

Porque eso es lo que hago yo.

¿Qué quiere decir exactamente con: Visual Studio dice que "la sesión no está disponible en este contexto"? ¿Obtiene un error de compilación o una excepción de tiempo de ejecución?

Se podría tratar de ser más defensivo y prueba si realmente existe una HttpContext actual y una Sesión:

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

El mismo código que utilicé. Es una Excepción de RunTime Obtuve – Shyju

+0

¿Puede publicar el mensaje de excepción que obtiene al acceder a la Sesión y el mensaje de excepción que está tratando de manejar? –

3

creo que el error applicaiton es específico para toda la aplicación y una sesión es específica para el usuario. Tal vez pueda lanzar su propia excepción donde guarda la información de la sesión dentro de su excepción.

+0

Sí. Los eventos de Applicationxxxx son específicos para su aplicación, no para una sesión. – Icebob

1

Usted puede intentar esto:

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

entonces usted debe utilizar es como esto :

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

pero si la excepción fue lanzada antes de que se cargue el objeto Session, será nulo

Cuestiones relacionadas