16

開発マシンを Windows 8 と Visual Studio 2012 にアップグレードしました。

ASP.Net アプリケーション (同じく .net 4.5 にアップグレード) をローカル IIS でテストしています。

私の最後の構成 (Windows 7、VS 2010、.net 4.0) ではそうではなかったのですが、私を悩ませていることの 1 つは、マークアップ ファイルの変更後に InProc セッションが再起動されることです。

例: ローカルの ASP.net アプリケーションにログインし、*.ascx ファイルに変更を加えて保存し、Web ブラウザーを更新すると、セッションが失われます。

セッションの再起動の問題をオフにするにはどうすればよいですか?

編集: 新しい VS 2012 Web アプリケーション プロジェクト テンプレートで問題を再現しようとしましたが、不要なコンテンツを削除しましたが、この問題を再現できませんでした。

ただし、私の実際のプロジェクトでは、まだ問題が残っています。aspx または ascx ファイルを変更すると、Application_Start イベントが発生します。

また、実際のプロジェクトの web.config を最小限に抑えて、新しいプロジェクトのように見えるようにしましたが、それでもバグを削除することはできませんでした。web.config でコメントアウトしたのは、DevExpress Controls、カスタム healthMonitoring、IIS UrlRewrite 2 です。

統合された Applicationpool、NetworkService を ID として使用する v4.0

4

5 に答える 5

8

私はこれを信用しようとするつもりはありませんが、答えは @ Anandによる元の質問に対する 11 番目のコメントに埋もれています。

次のキーを web.config に追加します。

<appSettings><add key="PageInspector:ServerCodeMappingSupport" value="Disabled" /></appSettings>

問題は解決します。VS の応答性も大幅に向上します。唯一の欠点は、Page Inspector によるサーバー側のトリックが失われることです。

うまくいけば、MSはすぐに修正を提供します..

于 2012-12-06T10:04:39.730 に答える
3

ここでの問題は、アプリケーションが動的コンパイルを実行していることです。これは、マークアップ ファイルを変更するとアプリケーションが再起動することを意味します。ご存知のように、アプリケーションを再起動すると、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 サーバーも同様に使用できます。

注: クラスをセッション状態にシリアル化して変更を加える場合は、状態サーバーを手動で再起動する必要があることに注意してください。そうしないと、シリアル化エラーが発生します。これは非常にまれですが、本番環境で注意する必要があります。

于 2012-11-05T10:17:07.320 に答える
0

SQL サーバー セッション状態モードを試すことができます。

于 2012-11-04T14:34:07.893 に答える
0

インプロセス モードを使用する場合、セッション データはサーバー メモリでホストされます。アプリケーション プールのリサイクル時間について IIS で確認する必要があります。

乾杯、

于 2012-10-30T16:06:43.053 に答える
0

おそらく関連する問題の 1 つ: TFS からファイルをチェックアウトした後、IIS (および ASP.NET 開発サーバー) がアプリケーションを再起動します。

ここで解決策を見つけました:http://forums.iis.net/p/1200785/2055480.aspx/1?IIS+Express+restarts+site+when+a+file+is+checked+out

  1. %USERPROFILE%\AppData\Roaming\Microsoft\VisualStudio\11.0に移動します。
  2. app_offline.htm ファイルを削除します。
  3. app_offline.htm という名前のフォルダーを作成します。
于 2013-09-02T12:11:02.387 に答える