2011-11-09 45 views

回答

3

由於IIS對網站根目錄中名爲「app_offline.htm」的文件進行了特殊處理,因此除非您重命名該文件,否則此建議可能無效。但是,在這裏它是無論如何...

你可以使用HttpHandler。在你的web.config中,添加如下內容:

<add name="app_offline_GET" path="app_offline.htm" verb="GET" type="namespace.classname,dllname" /> 

很明顯,在'type'屬性中替換正確的信息。

在HttpHandler的,做這樣的事情:

public void ProcessRequest(HttpContext context) { 
    context.Response.WriteFile("app_offline.htm"); 
    context.Response.StatusCode = 209;   
    context.Response.StatusDescription = "whatever"; 
} 
+0

這不起作用,IIS仍返回「503 服務不可用」。這是正確的,因爲你的處理程序是託管的,但'app_offline.htm'明確告訴停止處理新的請求,所以它們不會打到代碼。 – UserControl

+0

在您的情況下,無法更改文件的名稱嗎?如果沒有,也許一個HttpModule(而不是HttpHandler)會在處理序列中足夠早地觸發來完成這項工作。 – Ray

4

使用ASP.Net的「app_offline.htm」功能可以使用IIS URL Rewrite Module另一種,它具有huge bag of tricks和設置自定義響應代碼就是其中之一。

如果網頁的內容並不重要,只有響應代碼,然後用該模塊可配置的規則,只要規則已啓用,將返回一個209碼任何請求空白響應。

這將在你的web.config過程,因爲這樣的事情:

<configuration> 
    <system.webServer>  
     <rewrite> 
      <rules> 
       <rule name="app_offline" stopProcessing="true"> 
        <match url=".*" /> 
        <action type="CustomResponse" statusCode="209" statusReason="System unavailable" statusDescription="The site is currently down for maintenance, or something." /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 
+0

無法讓這個工作。據我所知,該模塊在請求進入ASP.NET管道之前工作。我開始認爲根本不可能實現:( – UserControl

+0

是的,我給出的例子將通過返回一個帶有209代碼的空白響應來處理請求,而不會將它傳遞給ASP.Net。這是你得到的,但不是你正在尋找的行爲? – woodysan

+0

準確無誤!ASP.NET總是返回app_offline.htm的內容和200個代碼,用於任何請求進來。我需要覆蓋它(自定義的NLB場景) – UserControl

1

爲了展示基於狀態代碼的具體內容,可以讓響應設置狀態碼和地圖內容,以顯示基於httpErrors部分中的代碼。請參閱這篇文章https://serverfault.com/questions/483145/how-to-add-a-site-wide-downtime-error-message-in-iis-with-a-custom-503-error-co

保全的利益例子,我將複製下面的例子:

<system.webServer> 
    ... 
    <rewrite> 
     <rules> 
      <rule name="SiteDown" stopProcessing="true"> 
       <match url=".*" /> 
       <action type="CustomResponse" statusCode="503" statusReason="Down for maintenance" statusDescription="will be back up soon" /> 
      </rule> 
     </rules> 
    </rewrite> 

     <httpErrors existingResponse="Auto" errorMode="Custom" defaultResponseMode="File"> 
      <remove statusCode="503" subStatusCode="-1" /> 
      <error statusCode="503" path="503.html" /> 
     </httpErrors> 
</system.webServer>