2009-07-22 13 views
8

私はASP.NETアプリケーションを持っており、Global.asaxのアプリケーションエラーイベントでは、エラーをトレース/ログするメソッドを呼び出しています。セッションを使用したいここで.Iは、以下のコードASP.NET:Access.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); 
} 

を使用変数の内容は、私がvariable.Visualメーカーが

は、「セッションが利用できないことを言っているセッションにアクセスしていますが、コードの行でエラーを取得していますこのコンテキストでは "

これを取り除くにはどうすればよいですか?何かご意見は?私はapplicaitonエラーは、アプリケーション全体に特異的であり、セッションはユーザーに固有であると考え、事前

+0

エラーはどこから投げられますか? aspxコードbeind(どのイベント?)、またはhttpハンドラなど?これにより、セッションオブジェクトの使用が有効かどうかを判断できます。 – JonoW

答えて

11

あなたはこのようにそれを行う場合、それは動作するはずです:それは私が自分自身を行うものですので

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

Visual Studioは「セッションはこのコンテキストで利用できません」と言っていますか?コンパイラエラーまたは実行時例外がありますか?

実際に現在のHttpContextとのセッションがある場合、あなたはより多くの防御的およびテストすることを試みることができる:

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

同じコードi used.itは実行時例外です – Shyju

+0

処理しようとしているセッションと例外メッセージにアクセスすると例外メッセージが表示されますか? –

3

感謝。たぶんあなたはあなたの例外内でセッションから情報を保存する独自の例外を投げることができます。

+0

はい。 Applicationxxxxイベントは、セッションではなく、アプリケーション固有のイベントです。 – Icebob

1

あなたはこの試みることがあります。

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

、あなたが使用する必要がありますが、このようなものですが:

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

ただし、Sessionオブジェクトがロードされる前に例外がスローされた場合、nullになります。