0

This Questionと同様に、私はインプロセスセッションに大きく依存するアプリケーションを持っています。セッションストアをローカルのState Serverに移動しようとしています。どのコントロールがシリアル化されているかを調べる

私はエラーを取得しています:

Type 'System.Web.UI.Control' in Assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.

問題は、私はシリアル化されしようとしているコントロールを判断することはできませんです。

完全な例外とスタックトレースは私に追加情報を表示しません。

シリアライズしようとしているコントロールを特定する方法はありますか? ASP.net、IIS7、フレームワーク4.0

+0

はなぜコントロールはシリアル化され、最初の場所でのセッションに格納されていますか? –

+0

良い質問です。 :)これは私が継承したレガシーアプリケーションで、更新しています。 1つの目標は、それらをセッションにまとめて格納することをやめることです。 – AaronS

+0

あなたはまだ少なくともページに絞り込んだことはありますか?ブレークポイントをどこに設定して、どこに爆弾を見ることができますか? –

答えて

1

Session[またはSession.Itemのグローバル検索を行うと、右へ=ですべてを見つけるを使用して

。それがセッションのすべての課題です。それは私の数百を超えることはできません。それらの1つはSystem.Web.UI.Controlです。おそらくデータベースにぶつかるのを避けるためにセッションに入っていました。コントロールを格納する代わりに、DataTableまたはDataSetまたは他の値を格納するコードを書き直します。

ソースコードをお持ちでない場合は、この短い逆コンパイル、コードの修正、再コンパイルの簡単な方法はありません。あなたはSQLSESSIONにあきらめていても

、あなたはまだそれがOutOfMemoryを問題を引き起こす可能性がありますSession--にUIコントロールを入れて停止することがあります。http://blogs.msdn.com/b/tess/archive/2008/05/28/asp-net-memory-thou-shalt-not-store-ui-objects-in-cache-or-session-scope.aspx

+0

それらのどれもsession ["]呼び出しでは直接追加されません。私はそれらがデータオブジェクトのどこかに隠されていると信じていますが、複数の検索が何も出ていません。最終的な目標は、セッションがどこにあるかを判断できるようになったら、セッションに全く追加されていないことを確認することです。 – AaronS

+0

trace.axdをオンにして、セッション変数を確認します。キー、タイプ、値が表示されます。次に、ソースコードでそのキーを検索します。また、ソースコードがない場合(つまり、サードパーティのコードまたはソースコードが失われている場合)、解決策はありません。 – MatthewMartin

+0

よろしくお願いします。これは問題の原因を直接教えてくれませんでしたが、どの特定のデータオブジェクトがセッションに格納されているかがわかりました。コントロールの追加先を決定するために、これらの各ステップを進めることができました。助けてくれてありがとう。 – AaronS

関連する問題