Web フォームと WCF サービスの両方を含む Web プロジェクトのセットアップがあります。アプリケーションが頻繁にリサイクルされ、すべてのシングルトン オブジェクトとセッション値が失われるという問題が発生しています。タイムアウトの問題ではないようですが、何らかのメモリ リークの可能性があります。アプリを 1 分ほど使用すると、すべてが失われます。
ディレクトリの変更を監視しようとしましたが、ファイルシステムへの変更はまったく見つかりませんでした。また、Application_Error にブレークポイントを設定しましたが、スローされるエラーはありません。
この問題を解決するために、2日間グーグルで検索しました。アプリケーションは、正常に動作している以前のプロジェクトの直接の複製です。私が気付いた違いの 1 つは、バックエンドに nHibernate を使用した最後のプロジェクトと、Linq to SQL を使用するように切り替えたこのプロジェクトです。サービス呼び出し内の DataContext のインスタンスを薄暗くし、コンテキストを破棄または何も設定しない前に値を返すため、DataContext を適切に処理していないことに気付きました。「リポジトリ」クラスにデータコンテキストを保存する代わりに、操作コンテキスト内に保存し、Application_EndRequest で明示的に破棄しようとしました。それはまだ問題を解決していません。
私が見るべき提案や場所はありますか?
** 更新 **: 問題が見つかったと思います。EntitySet を使用しているオブジェクトがあり、リストを返す linq クエリでシリアル化可能な IList プロパティを使用して、これらのオブジェクトを直接シリアル化しています。データを返す前にデータ コンテキストを明示的に破棄しようとしたときに、データ コンテキストがアクティブでなくなったため、これらの EntitySet をシリアル化する際に問題が発生しました。EntitySet の代わりに通常のリストを使用して新しい空白のオブジェクトにデータをコピーしてみます。これにより、データ コンテキストを適切に閉じて問題を解決できるかどうかを確認します。