2012-05-05 17 views
0

セッションにいくつかのものを保存する必要があります。現時点では、私は開発マシンでInProcセッションを使用していますが、SQLサーバーセッションとAzureのAppFabricセッションを使用して展開したいと考えています。セッションにオブジェクトを格納する

私はいくつかのプロパティ、すべてのプリミティブ型を含むオブジェクトを作成しました。私はこのようなセッションの読み取りを処理しています:

SessionObject TheCurrentSession = 
    HttpContext.Current.Session["UserAppSession"] as SessionObject; 

基本的に、私はシリアライズさだと毎回セッションのロードとセーブを直列化復元オブジェクト内のセッション変数をラップしています。

それぞれのプロパティをネイティブフォーマットで保存し、ラッピングオブジェクトにセッションの各プロパティをネイティブタイプとして読み書きする方が良いのではないかと思います。

だから例えば、私はこのようなRecreateSessionと呼ばれる方法があるだろう:私はシリアライズ/デシリアライズプロセスを妨げるそうだと思う

public class SessionObject 
{ 
    public void RecreateSession() 
    { 
     this.SessionObjectProperty1 = 
         HttpContext.Current.Session["SessionObjectProperty1"]; 
     this.SessionObjectProperty2 = ...; 
     this.SessionObjectProperty3 = ...; 
    } 
} 

をし、コードの他の部分に直接アクセス可能な値を作ることができます(すなわち、HTTPモジュール)。

私のセッションの実装を変更する価値はありますか?これのベストプラクティスは何ですか?

ご意見ありがとうございます。

答えて

1

私のセッションの実装を変更する価値はありますか?

あなたが使いやすくなった場合のみ。

このためのベストプラクティスは何ですか?

あなたはすでにそれらをやっています。関連する複数のプロパティを保持するための単一のオブジェクトを作成して(それを一緒に使用する可能性があります)、個別のセッションプロパティの束ではなくセッションに格納します。

+0

ok、あなたはオブジェクトにシリアル化/非直列化を保持する方がセッションを保存するより良い方法だと思いますか、各プロパティを直接保存し、asp.netコンテキストから各プロパティを読み込んでラッピングオブジェクトを作成する必要があると思いますか?セッション?どちらの方法でも自分のコードでOKだと思います。 – frenchie

+0

@frenchie - カスタムシリアル化コードを書く必要はありません。プロパティを割り当てて必要に応じてキャストする方が簡単です。 – Oded

+0

はい、私はそれが自動的にシリアル化されていることを知っています。フレームワークが自動的にそれを処理しているとしても、それはまだそれを行う必要があります。この定数のシリアル化/デシリアライゼーションは、ある時点でパフォーマンス/スケーリングの問題になりますか? – frenchie

1

私はいつも各プロパティが特定のセッション項目を参照するカスタムオブジェクトを作成しました。私はその最適なオプションだと思います。

関連する問題