1

MVC 3、特にAzureでカスタムメンテナンスページを設定しようとしています。基本的にそれをSEOフレンドリーに保つために、私は503(サービス利用不可)を返す必要があります。他のすべてのカスタムエラーページは、通常のAzure(404など)で機能します。

<customErrors mode="On">
  <error statusCode="404" redirect="404.htm"/>
  <error statusCode="503" redirect="503.htm"/>
</customErrors>

404ページは機能しますが、503がフォローされておらず、単に醜いサービスを利用できないページが表示されます。error.cshtmlと標準のHandleErrorAttributeを介して500エラーが正常に機能しています。

次を使用して、ActionFilterから自分のActionResultを返してみます。

public class SiteDownForTestingResult : ActionResult
{
    public SiteDownForTestingResult() : base()
    {
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var path = System.Web.Hosting.HostingEnvironment.MapPath("~/app_testing.htm");

        var response = context.HttpContext.Response;

        response.Clear();
        response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
        response.StatusDescription = "Service Unavailable.";
        response.WriteFile(path);
        response.End();
    }

}

app_testingは私のカスタムページであり、filterContext.Result = new SiteDownForTestingResult();ActionFilterのOnActionExecutingから設定しても、プレーンな503「サービスを利用できません」ページが表示されます

これは、Azureのapplication.configが、私が知らない何かをロックしていることと関係がありますか?これはIIS7と私のローカルボックスでは問題なく機能しますが、エミュレーターとクラウドはどちらも喜びを与えません。

どんな助けでもいただければ幸いです。

4

1 に答える 1

2

私の理解に基づいて、カスタム 503 エラーは、主にアプリ プールが利用できない場合に https.sys から直接生成されます。そして今、アプリプールがない場合、カスタムエラー設定で設定が機能しなくなり、アプリプールに固有になります。また、ほとんどの検索エンジンは 503 エラー コードに依存しているため、検索結果が適切に表示されます。そのため、このエラーのカスタマイズは通常、アプリケーション レベルでは行われません。

Windows Azure Emulator について言及されたように、Windows Azure Web Role を使用していると思います。Windows Azure Web ロールを使用すると、スタートアップ タスクで AppCmd.exe を使用して IIS をカスタマイズできます。これは、カスタマイズの最大レベルです。Windows Azure ではカスタマイズの HTTP.sys レベルに到達できないため、Windows Azure ではカスタマイズ 503 エラーが機能しない可能性があります。

于 2012-07-06T17:31:50.530 に答える