14

ASP.NET が提供する app_offline.htm ファイルは、http ステータス 503 を返します。これは、ほとんどの状況で正しい動作です。ただし、特定の URL が要求されるシナリオ (例: https://www.mywebsite.com/monitor ) では、返される http ステータスを 200 に変更し、他のすべての状況では http ステータス 503 を返します。これは可能ですか?

これを行う理由は、Web サイトで定期メンテナンスを行うときは常に app_offline.htm ファイルを使用しますが、稼働時間監視サービス (Pingdom.com) が定期メンテナンス中にダウンタイムを報告しないようにするためです。

app_offline.htm は要求処理サイクルの非常に早い段階で提供されるため、これは IIS レベルである必要があると思います。

4

6 に答える 6

14

App_OfflineASP.NETの部分を削除するためだけにあり、IISサイトとは関係がないことに注意してください。.htmなどのASP.NET以外のすべての要求は、通常のIISパイプラインを通過します。

そうは言っても、aHTTP 503は利用できないサービスエラーです。サイトを部分的にオフラインにします。サイトがオフラインのときにすべてのASP.NET要求が応答を受け取るのApp_Offline.htmは正常で正しいことです。503

これをHttpModuleでバイパスするか、ASP.NETパイプラインのコードは有効なソリューションではありません。

メンテナンス中にIISルートで既に作成/コピーしているので、フォルダまたはIISサイトのデフォルトのドキュメントとしてApp_Offline.htm追加し、メンテナンス中にファイルを作成/コピーすることをお勧めします。デフォルトのページは次のようになります。 ASP.NETサイトがオフラインであるかどうかに関係なく到達します。maintenance.htm/monitormaintenance.htm

http://servername/monitor/プローブがページを指定せずにURIを呼び出している場合、プローブは機能します。

App_Offlineメンテナンス後、削除するだけです。削除するのと同じです。

于 2011-03-10T17:02:43.493 に答える
4

私の知る限り、app_offline.htmロジックはASP.NET 2.0モジュール内で処理されますが、アプリケーションの読み込みが始まる前に処理されます(もちろん、これはapp_offline.htm * g *の背後にある考え方です)。

私は提案します:

  • monitor(無効にした)Webサイトのルートに名前を付けた仮想ディレクトリを追加し、 IISで読み取り可能なフォルダーに割り当てます。
  • 仮想ディレクトリをアプリケーションにしないでください。ASP.NETはそのフォルダーから手を離す必要があります。
  • たとえば、app_offline.htm名前を変更したファイルのコピーdefault.htm(またはデフォルトのファイル名リストにあるもの)をそのフォルダに入れます。

このように、IISはにアクセスするときに200応答でhtmlファイルを提供する必要がありますhttps://www.mywebsite.com/monitor

ああ、そして検索エンジンに関するアディルソンの警告を尊重するため<meta name="robots" content="noindex">に、ウェブサイトが検索エンジンによって到達可能である場合に備えて、ファイルにを追加するだけです。

于 2011-03-09T16:28:38.103 に答える
2

IIS 7 と統合パイプラインを使用している場合でも、ASP.NET パイプラインの一部ではない要求、つまり .Htm 要求に対して HttpModule を作成できます。

http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the-iis7-integrated-pipeline/

ASP.NET IIS 7 ライフサイクル

http://learn.iis.net/page.aspx/121/iis-7-modules-overview/

于 2011-03-13T00:15:41.243 に答える
0

IIS レベルでhttp リダイレクトを使用できます。

于 2011-02-22T18:03:57.623 に答える
0

Global.asax Application_Error メソッドを処理し、URL を識別し、エラーを識別し、ページにリダイレクトできます。

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        Dim ctx = HttpContext.Current
        dim myerror = ctx.Error
        If HttpContext.Current.Request.Path = "mypath" Then
            HttpContext.Current.Response.Redirect("~/mydestpage.aspx")
        End If
    End Sub

これにより、前のリクエストに対して最初に 302 が返され、次に 200 を示すページにリダイレクトされます...

于 2011-02-22T16:58:44.533 に答える
0

ちょっと。これを行うときは注意してください!200 応答により、エラー ページが Google やその他の検索エンジンにインデックスされる可能性があります。

それでもそうする場合は、HttpModule を作成し、モジュール スタックの一番上に配置する必要があると思います。このモジュールは、App_offline.html ファイルが存在するかどうかをテストする必要があります。存在する場合は、要求がサイト モニターからのものかどうかをテストします。この場合、200 で応答できます。それ以外の場合は、不適切なサイトのインデックス作成を回避するために応答コードを 503 にする必要があります。

重要: サイト アプリケーション プールは統合モードである必要があります。

于 2011-03-07T03:32:01.433 に答える