2012-07-06 54 views
1

我试图在MVC 3上建立一个自定义维护页面,但是特别在Azure上。基本上要保持搜索引擎友好,我需要返回一个503(服务不可用)。我所有的其他自定义错误页在Azure中(如404)工作按照通常如何创建返回503的Azure自定义维护页面?

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

404级的作品,但在503后面没有,我只是得到一个丑陋的服务不可用页面。我有500错误通过error.cshtml和标准HandleErrorAttribute正常工作。

我甚至尝试使用以下

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回我自己的ActionResult是我的自定义页面,然后从OnActionExecuting设置filterContext.Result = new SiteDownForTestingResult();一个ActionFilter,仍然我被招呼明确503'服务不可用'页面

这是关于Azure上的application.config锁定某些东西或其他我不知道的东西。这在IIS7和我的本地盒子上工作正常,但模拟器和云都没有喜悦。

任何帮助,将不胜感激。

回答

1

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

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

相关问题