2011-08-04 356 views
19

アプリケーションエラーイベントでセッションIDを読み込みますが、「セッションの状態はこのコンテキストでは使用できません」というエラーが表示されます。どうして?奇妙なことは、別のasp.netアプリで同じコードがあり、すべて正常に動作することです。セッションの状態はこのコンテキストでは利用できません

void Application_Error(object sender, EventArgs e) 
{ 

     var sessionId = Session.SessionID; 
     //skipped code 

} 
+0

あなたは、このための答えを持っていなかったら? –

+0

http://siderite.blogspot.com/2009/01/session-state-is-not-available-in.htmlこれは私の人生を救った。 – Denis

答えて

27

セッションオブジェクトが使用できない場合があります。これは、エラーが発生したときに依存します。

たとえば、Begin_Requestでエラーが発生した場合、セッションはまだ作成されていないため利用できなくなります。

要約すると、エラーが発生した時期によっては時にはうまくいきません。

セッションIDにアクセスする前にセッションオブジェクトの状態を確認することをおすすめします。

HttpContext context = HttpContext.Current; 

if (context != null && context.Session != null) ... 
+1

正しくないと、式は常にtrueを返します。 – Tomas

+0

ありがとう、更新済み – edge2

+2

また、HttpContext.Currentはnullになる可能性がありますので、* if *句は次のようになります: 'if(context!= null && context.Session!= null)' – Karlth

1

Application_errorは、ガベージコレクタがクリーンアップするなど、セッションが存在しない状況で発生する可能性があります。エラーの原因はユーザースレッドではない可能性があります。

セッションが最初にヌルかどうかを確認してください。

サイモン

2

チェックデザイン部の制御や問題にマッピングされているC#で欠落しているすべてのイベントが

関連する問題