App_Offline.htm が存在する場合でも IIS がファイルをロックする

App_Offline.htm が存在する場合でも IIS がファイルをロックする

ホスティング会社がサーバーをアップグレードし、サイトを移行しました。Visual Studio で開発し、サイトをローカル フォルダーに公開してから、FTP 経由でアップロードします (FileZilla を使用すれば違いが出るかもしれません)。

古いサーバーでは、各サイトの フォルダー_App_Offline.htmにという名前のファイルを保存していましたwwwroot。新しいバージョンをアップロードするときに、この名前を に変更してApp_Offline.htm、IIS がアップロードしたファイルを解放できるようにし、その後、ファイルの名前を元に戻しました。これですべて正常に動作しました。

新しいサーバーでは、ファイル名を変更しても IIS がファイルを解放できないため、変更内容をアップロードできません。コントロール パネルで Web サイトを停止してみましたが、効果はありませんでした。アプリケーション プールを停止してみました。通常はこれで効果がありますが、その後再起動すると、ほぼ必ず失敗します。再起動するまでに少なくとも 15 ~ 20 回の試行が必要です。

ここで何が問題なのか、何かアドバイスはありますか? あまり手がかりがないことは承知していますが、他に何を言えばいいのかわかりません。ここに、おそらく関連する詳細をいくつか示します...

  • Windows Server 2022
  • 10 の
  • サーバーはWindows FTPを実行しています
  • すべてのサイトは.NET 6または7で、ほとんどがBlazorですが、一部はRazorページです。

他に提供できる情報があればお知らせください。

ありがとう

答え1

奇妙なことに、IIS がファイルを保持している間はファイルを削除したり上書きしたりすることはできませんが、名前を変更することはでき、サイトは以前と同じように動作します。

したがって、この問題を回避する 1 つの方法は、重要なファイル (私の経験では通常、メイン DLL のみ) の名前を変更し、新しいバージョンをコピーしてから、app_offline.htm トリックを使用して Web サイトを再起動することです。再起動したら、名前を変更した (古い) ファイルを削除できます。

実際には、古いファイルをすぐに削除できるとは限りませんが、 というプレフィックスを付けて名前を変更すると、zzzファイル リストの下部に隠れて見えなくなり、次回アップロードするときに削除できるようになります。

全体的に、かかる時間は同じですが、app_offline.htm の名前を変更してアップロードし、名前を元に戻す代わりに、DLL の名前を変更し、アップロードして app_offline.htm の名前を 2 回続けて変更します。この方法の利点は、ダウンタイムが大幅に短縮されることです。基本的に、サイトがダウンするのは、app_offline.htm の名前を変更して名前を元に戻すのにかかる時間だけです。

お役に立てれば幸いです。

関連情報