1

ご存じのとおり、ASP.NET では、次の 3 つのモードのいずれかでセッション データを保存できます。

  • インプロセス
  • セッション状態
  • SQLサーバー

InProc モードでは、シリアライズ可能でなくても、あらゆる種類のデータ オブジェクトを格納できます。ただし、セッション状態と SQL Server モードでは、シリアル化されたデータのみを保存できます。

私のプロジェクトでは、「InProc」モードを使用してセッションを保存する既製のポータルがあります。スケーラビリティと障害処理の問題があるため、代わりにセッション状態を使用する必要があります。

このポータルがシリアル化されていないオブジェクトをセッション コンテキストに内部的に保存しているという問題 (つまり、保存されたオブジェクトは ISerializable インターフェイスを実装していません)。私は彼らのコードにアクセスできません。コードを変更せずにセッション オブジェクトを State Server に保存できるようにするための回避策はありますか。これが何らかの形で役立つ場合は、まだ web.config ファイルにアクセスできます。

4

2 に答える 2

1

私の知る限り、簡単な答えはノーです。コードを変更してもかまわない場合は、実際のオブジェクトと自分のオブジェクトの間にラッパー オブジェクトを挿入し、ラップされたオブジェクトのシリアル化をラッパーに処理させることができます (本質的にシリアル化の代理として)。コードを書き直すだけで...

それらはどのようなオブジェクトですか?通常、セッション状態のオブジェクトは単純なデータ クラスなので、それらをシリアル化するのにあまり問題はないはずですか?

于 2008-10-28T12:43:11.767 に答える
1

シリアライゼーションは、オブジェクトの状態を再作成するために保存および読み取りが可能なオブジェクトの表現を作成します。

オブジェクトに値の型しか含まれていない場合は、ISerializable を実装する必要はなく、[Serializable] 属性のみが必要な場合があります。

この回答をより役立つものにする、または目前の質問に直接導くには、次のようにします。

何らかの方法でシリアライズ可能として宣言されていないオブジェクトをシリアライズすることはできません。オブジェクトを再作成する他の一般的な方法では、オブジェクトが「シリアル化」される前と同じ状態にならない可能性があります。

マークが述べたように、独自のシリアル化可能な「ラッパー」を作成することでそれを行うことができますが、問題のオブジェクトに非常に精通している必要があり、オブジェクトには再作成できるメソッドが必要ですそのような方法。

于 2008-10-28T12:44:28.270 に答える