2016-04-23 11 views
0

オブジェクトの周りのラッパーとして機能するはずの静的なSessionManagerクラスを実装しようとしています。これはHttpContext.Current.Session["objSession"]に格納され、実際にはすべてのセッションデータを保持します。 SessionManagerクラスは、SessionStoreと同じプロパティを持ちますが、必要に応じてセッションデータを操作するために追加のメソッドが必要です。基本的に、SessionManagerは、セッションオブジェクトに格納されたプロパティの取得/設定を容易にします。ASP.NETセッションマネージャがヌル参照例外をスローする

すべてのクラスはWebソリューションと同じ名前空間に格納され、すべてがシリアライズ可能です。

私はHttpContext.Current.Sessionで何かをしようとすると、両方、同じポイントでnull参照の例外を投げ、私の問題には2つの異なった解決策を試してみました:

public static class SessionManager 
    { 
     static SessionManager() 
     { 
      if (HttpContext.Current.Session != null) 
      { 
       try 
       { 
        if (HttpContext.Current.Session["objStore"] == null) 
        { 
         HttpContext.Current.Session["objStore"] = new SessionStore(); 
        } 
       } 
       catch (NullReferenceException) 
       { 
        HttpContext.Current.Session["objStore"] = new SessionStore(); 
       } 
      } 
     } 

呼び出しページのコードビハインド:

protected void Page_Load(object sender, EventArgs e) 
     { 

      if (SessionManager.groupSettings.Count > 0) 
      { 
       pnlDashboard.Visible = true; 
       pnlLogin.Visible = false; 
       getDisplayData(); 
      } 
      else 
      { 
       pnlDashboard.Visible = false; 
       pnlLogin.Visible = true; 
      } 
     } 

SessionManagerへのデバッガのステップ ダウンすべての方法は、回線に

if (HttpContext.Current.Session != null)

ここで停止し、例外をスローします。しかし、コード上にカーソルを置くとプロパティダイアログが開き、HttpContext.Current.Sessionオブジェクトがnullではないことが示されます。その結果、コールスタックはここですが、ソース行がである、if (SessionManager.groupSettings.Count > 0)であることを示しているコードビハインド:

[NullReferenceException: Object reference not set to an instance of an object.] 
    Project.Default.Page_Load(Object sender, EventArgs e) in C:\Users\ASP\Project\Project\Default.aspx.cs:20 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51 
    System.Web.UI.Control.OnLoad(EventArgs e) +95 
    System.Web.UI.Control.LoadRecursive() +59 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2952 

私の第二の試みは、上記の静的コンストラクタ内のすべてのコードがあったが、それを持っていました呼び出しページのコードビハインドで最初ifの文の上に呼ばれたpublic static sessionStart()方法は、:

protected void Page_Load(object sender, EventArgs e) 
    { 
     SessionManager.sessionStart() 
     if (SessionManager.groupSettings.Count > 0) 
     { 
      pnlDashboard.Visible = true; 
      pnlLogin.Visible = false; 
      getDisplayData(); 
     } 
     else 
     { 
      pnlDashboard.Visible = false; 
      pnlLogin.Visible = true; 
     } 
    } 

私は本当にこの問題を引き起こしている可能性が何にとして困惑しています。私は自分のコードのどこかに静的なクラスを持っていて、何の問題もなく、セッションはnullではないようです。

すべてのサポートに感謝します。ありがとうございました!

+0

'SessionManager.groupSettings'は何である – spender

+0

'一覧 '実際には私の問題の原因と思われます...私は 'SessionStore'内のすべてのプロパティを初期化しました。問題は修正されているようです(おそらく、nullオブジェクトを直列化できませんか?私の次の問題は、デバッガが「ステップオーバー」を「続行」として扱うことです。 – ToxicPineapple

答えて

1

SessionStoreクラス内のオブジェクトを初期化していないようですが、初期化したコンストラクタを追加して問題が修正されたためです。たぶん、問題は実際にオブジェクトが直列化されているときに起こっていた(オブジェクトが状態サーバーに格納されている場合のように)、エラーメッセージが私を混乱させました。

編集 - ??私はいつも... ...これを行う私はStackOverflowのに投稿した後の溶液を把握:(

関連する問題