ここでの問題は、アプリケーションが動的コンパイルを実行していることです。これは、マークアップ ファイルを変更するとアプリケーションが再起動することを意味します。ご存知のように、アプリケーションを再起動すると、InProc セッションがダンプされます。
ローカル テンプレートの「Web アプリケーション」の設定が異なるため、アプリケーション全体が再起動されません。ただし、プリコンパイルすることには利点があります。
これにはいくつかの方法があります。
なぜこれが起こっているのか
ASP.NET 4.5 では、既定で "Web アプリケーション" と "Web ページ" を並べて実行できます。これは、aspx への変更が precomulation を発生させる原因となっている可能性があります (これは、変更があるたびに「Web ページ」が行う必要があります)。詳細はこちら:
http://msdn.microsoft.com/en-us/library/dd547590.aspx
新しいバージョンでは、Web サーバーを最適化するための変更もかなりあります。これらの変更の詳細はこちらで確認でき、アップグレード時に変更について説明することもできます。
http://www.asp.net/vnext/overview/aspnet/whats-new
解決策は同じであり、その場で単一の aspx ファイルを更新することはお勧めしません。やむを得ない場合は、最終的にどのセットアップでも再起動が発生するため、以下の解決策のいずれかを使用する価値があります。
ソリューション
コンパイルモード
web.config で CompilationMode を確認してください。詳細については、この投稿をチェックして
ください http://www.campusmvp.net/compilationmode-avoiding-aspx-page-compilation-to-improve-scalability-in-sites-with-thousands-of-pages/
これはサーバーレベルでも設定できるため、環境による違いを得ることができます。
セッション状態モード
StateServer モードで、または SQL サーバーを使用して、セッション状態を実行できます。.net がインストールされていて、自動起動に設定する必要がある場合、ASP.NET 状態サーバーはサーバー上に置かれます。その後、構成で切り替えることができます。
<sessionState mode="StateServer" useHostingIdentity="true" cookieless="false" timeout="120" stateConnectionString="tcpip=127.0.0.1:42424" />
開発には常に ASP.NET 状態サーバーを使用して実行し、多くの場合は運用環境で実行します。長いユーザー パスウェイ (多数のフォームを含むフォーム ウィザードなど) をテストする場合、再構築するたびにセッションが切断されるのは非常に面倒です。これは、アプリの再起動時にセッションが失われないことも意味します。
SQL サーバーも同様に使用できます。
注: クラスをセッション状態にシリアル化して変更を加える場合は、状態サーバーを手動で再起動する必要があることに注意してください。そうしないと、シリアル化エラーが発生します。これは非常にまれですが、本番環境で注意する必要があります。