2011-07-04 83 views
0

私は、単一のサーバーでセッション管理として "inproc"を使用するASP.NET Webサイトを持っています。今、Webサイトを負荷分散環境の後ろにある2つのサーバーに配置する必要があります。私たちは、 "inproc"モードはWebファーム環境では動作しなくなることを学びました。ですから、 "inproc"からSQLサーバーモードに切り替えるオプションがあります。また、私はそれがweb.configの更新の問題ではないことを学びました(もちろん、SQLデータベースの作成)。以来、私はdatatable、ユーザー定義クラス、リスト、...セッション変数に保存しています。私は、ユーザー定義のクラスをシリアライズ可能(クラスに[Serializable]を入れてください)しなければならないことを理解しています。残りの部分は.NETが処理します(これを処理するコードを明示的に指定する必要はありません)。asp.netセッション状態のシリアル化

これは間違いありませんか?そして、DataTable、Listなど他の「特別な」タイプの場合はどうしたらよいでしょうか?

ありがとうございました。

+0

とにかく、すべてのセッションデータは、inprocまたはsessionstateまたは他のモードでシリアル化可能でなければなりません。 –

答えて

0

@ AD.Netのコメントを強化するために、inProcモードを使用してオブジェクトを保存できる場合は、シリアル化に関して他のモードを使用して格納することに問題はありません。

datatableのようなオブジェクトの場合は、according to MSDNというクラスが既にボードの下でシリアライズ可能とマークされています。

1

これは基本的には正しいですが、クラスの作成、すべてのテストなどの作業は簡単ではありません。セッション中に必要なものはすべてシリアル化する必要があります。したがって、「特別な」データ型の場合は、それらのシリアル化バージョンを生成する必要があります。なぜデータテーブルをセッション状態に保存しているのかを調べることができます。私は、あなたがやっていることをとてもよく見て、そこには最小限の量しか保存しないことをお勧めします。

私の現在のクライアントは、大量のオブジェクトが多数存在するSQLセッションを使用しており、これらの大きなオブジェクトの直列化と逆シリアル化、およびDBからの書き込みと読み取りが必要なため、ゆっくり実行されます。

そして、あなたはいつか、セッション変数が悪い考えであると言う理由を理解できます。スケーラビリティは、今行わなければならない作業の量とSQLセッションストアのサイズの問題の両方から大きな問題です。

ETA:他の人からも言われているように、連載可能な問題はどのようなタイプのセッション状態でも同じです。

+0

+1オブジェクト全体をシリアライズするためのアドバイス - 私は答えに追加するのが面倒です。 @tony - そのアドバイスは[あなたの他の質問の1つを考慮]非常によく役立つかもしれません(http://stackoverflow.com/questions/6540954/dealing-with-larger-traffic-on-asp-net-web-site ) – Smudge202

+0

セッションでDataTableを格納している理由は、ポストバック時にそれを取り戻すことだけです。そのためにqureyを再度実行する必要はありません。セッションに保存せずに取得できる別の方法があるかどうかはわかりません。 – Tony

+0

あなたがそれをしなければならない場合は、そう、それは非常に非効率的になり、あなたはクエリを再実行するために迅速であることを見つけることに注意してください。または、一時テーブルにデータを保存して取得することもできます。 –

1

私もDataTableためSqlSessionState

  • をインプロセスからアプリケーションを切り替える必要があった、それはすでに直列化1です。
  • List<T>の場合、Tがシリアライズ可能である場合に限り、シリアライズ可能です。

ほとんどの.NETシンプルタイプはシリアライズ可能です。ただし、独自のクラスを宣言して使用する場合は、それらをセッションに格納するためにSerializableを宣言する必要があります。

tl; dr; SessionstateをSqlServerに切り替え、動作するまでシリアル化します。

2番目のテストは、2台のサーバーで同じ暗号化と復号化のコンテキストを確保することです。 http://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.71%29.aspxと両方のサーバーが同じキーを使用していることを確認してください。

+1

+1暗号化ヒントから。私は常にMachineKeysを同期することを忘れています – Smudge202

関連する問題