2012-07-06 125 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上運行。

相關問題