1

かなり大規模なアプリケーションがあり、最近ランダムログアウトの問題が発生しました。調査の結果、(1GB) の物理メモリ制限に達した後、アプリ プールがリサイクルされていることがわかりました。以下のように、セッション状態をプロセス外に保存しようとしています

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="20"/>

セッション状態モードを「StateServer」に変更し、サーバーでasp.net状態サービスを実行した後。次のエラー メッセージが表示されます

「セッション状態をシリアル化できません。'StateServer' および 'SQLServer' モードでは、ASP.NET はセッション状態オブジェクトをシリアル化し、その結果、シリアル化できないオブジェクトまたは MarshalByRef オブジェクトは許可されません。同様のシリアル化の場合、同じ制限が適用されます。 「カスタム」モードのカスタム セッション状態ストアによって実行されます。」

セッション関連のオブジェクトを [Serializable] 属性でマークする必要があるようですが、アプリケーションはかなり大きいです。この問題を回避する方法はありますか?

ありがとう

4

1 に答える 1

4

この問題を回避する方法はありますか?

いいえ、セッションに保存しているオブジェクト グラフに参加しているすべてのオブジェクトを分析し、それらを[Serializable]属性で装飾する必要があります。

別の方法はあなたを気に入らないでしょう: セッション状態オブジェクトのシリアル化を制御できるカスタム セッション状態プロバイダーを作成しますが、それは通常やり過ぎです。

于 2013-09-19T11:11:05.883 に答える