1

aspxページを作成し、FirefoxとChromeで表示したところ、C#コードを実行して正しく機能しました。しかし、ページに変更を加えると(すべてを削除して空白のページを提供するなど)、両方のブラウザーに元のコンパイル済みaspxページが引き続き表示されます。

aspxファイルに変更を加えても、ASP.Net(Webサーバー)が再コンパイルされていないようです。再コンパイルする唯一の方法は、web.configを変更してから、Webサーバーを再起動することです。

次のコードも追加しましたが、元のページが読み込まれます。

<script runat="server">
Sub Page_Load
    Random rd = new Random();
    Response.AddHeader("ETag", rd.Next(1111111, 9999999).ToString());
    Response.AddHeader("Pragma", "no-cache");
    Response.CacheControl = "no-cache";
    Response.Cache.SetNoStore();
    Response.Expires = -1;
End Sub
</script>

ブラウザのキャッシュを除外するために行ったテスト:

  1. aspxページを作成し、Firefoxのみにロードしました(Chromeではありません)
  2. aspxファイルを変更しました
  3. Firefoxにaspxを再度ロードしましたが、変更はありません
  4. Chromeに(初めて)ロードしましたが、まだ古いバージョンが表示されていました!

IISではなくApacheとMonoを使用する

4

3 に答える 3

2

これは、Linuxの問題でMono+Apacheのようです。コンパイルされたページへの変更は表示されません。唯一の回避策は次のとおりです。

  1. Apache Webサーバーを再起動します(これにより、変更されたものとして認識されます)-約2秒しかかかりません

  2. 「/tmp/ www-data-temp-aspnet-0 /」の一時ファイルを削除します(これは少しバグがある可能性があるため、#1の方が適しています)

于 2013-01-18T21:01:22.080 に答える
0

WebアプリケーションがWeb Applicationプロジェクトであるかプロジェクトであるかを確認してくださいWeb Site。Webアプリケーションの場合は、何かを変更するたびにコンパイルする必要がありますが、Webサイトプロジェクトでは、コンパイルせずに変更を反映できます。また、ブラウザで使用Ctrl+F5して、キャッシュされていないページのコピーを取得できます。彼の助けを願っています。

詳細はこちら

于 2012-12-18T05:22:59.003 に答える
0

簡単な回答:これはブラウザのせいであり、設計上予想される動作です。ブラウザでキャッシュを強制的に更新します(IEではCtrl-F5)。

修正:IISではなくMono/Apacheスタックの場合。その場合、手動で再起動することが唯一の回避策になります。IISでは、サーバーがアイドル状態のプロセスを強制終了するときに、非アクティブな期間の間に古い効果が自然に解消されます。Monoでは、同じクリーニングスケジュールがある場合とない場合があるため、プロセスのライフサイクルと構成が最初に修正を確認します。

再コンパイルされない動作は、要求されたページの複雑なIDによって引き起こされます。IDには、URL、タイムスタンプ、およびセッションが含まれます。ブラウザを閉じずにページを更新しようとすると、ASPサーバーは古いコンパイル済みページの古いコピーを提供する必要があります。これは、サーバーが提供されたページと既存のセッション、ビューステート、場合によってはクライアントに存在するクライアント側のスクリプトとの整合性を維持しようとするためです。また、ブラウザは、ゆっくりと変更されるインターネットページに準拠するように設計されており、コピーをキャッシュに保存し、コピーの経過時間を維持して不要なネットワークトリップをスキップします。そうでなければ、インターネットは10倍遅くなります。

その他の注意:ASPサーバーを介してプッシュするのに最も遅いファイルはcssファイルです。

于 2012-12-18T05:23:37.863 に答える