如何为Azure创建返回503的自定义维护页面?

时间:2012-07-06 16:43:42

标签: asp.net-mvc-3 azure http-status-code-503

我正在尝试在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是我的自定义页面,然后从ActionFilter的OnActionExecuting设置filterContext.Result = new SiteDownForTestingResult();,我仍然受到普通503'服务不可用'页面的欢迎

这是否与Azure上的application.config有关,锁定了一些我不知道的东西。这在IIS7和我的本地机箱上工作正常,但是模拟器和云都没有给人带来欢乐。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

基于我的理解,自定义503错误是直接从https.sys生成的,主要是当应用程序池不可用时。现在,当没有应用程序池时,您的设置无法在您的自定义错误设置中运行,将特定于应用程序池。此外,大多数搜索引擎依赖于503错误代码作为回报,因此正确显示搜索结果,这就是为什么通常不会在应用程序级别进行此错误的自定义。

当您引用Windows Azure模拟器时,我相信您使用的是Windows Azure Web角色。使用Windows Azure Web角色,您可以在启动任务中使用AppCmd.exe自定义IIS,这是您的最高自定义级别。您无法在Windows Azure中达到HTTP.sys自定义级别,因此自定义503错误可能无法在Windows Azure上运行。