文章編號: 925764 - 上次校閱: 2007年5月11日 - 版次: 1.2

網頁瀏覽器傳送 Active Server Page 的要求至執行 IIS 6.0 的 Web 伺服器時,出現錯誤訊息:「超出回應緩衝區限制」

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

徵狀

試想下列案例。用戶端網頁瀏覽器傳送 Active Server Page (ASP) 的要求至執行 Internet Information Services (IIS) 6.0 的 Web 伺服器。ASP 要求產生很大的回應。在這種情況下,可能會出現下列徵狀:
  • 回應失敗。
  • 發生 HTTP 500 伺服器錯誤,而且您在用戶端網頁瀏覽器中會收到下列錯誤訊息:
    Response object error 'ASP 0251 :80004005'
    Response Buffer Limit Exceeded
    /PageName.asp, line LineNumber (回應物件錯誤 'ASP 0251 : 80004005'
    超出回應緩衝區限制
    /PageName.asp,行 LineNumber)
    請注意PageName.asp 代表所要求之 ASP 頁面的名稱。LineNumber 代表回應緩衝區超出限制之前所處理的檔案中最後一行的行號。
  • IIS 記錄檔的 cs-uri-query 欄位中包含下列錯誤:
    |0|ASP_0251_:_80004005|Response_Buffer_Limit_Exceeded

發生的原因

之所以發生這個問題,是因為 IIS 6.0 中引進並加入 IIS 5.0 的行為變更。這些版本的 IIS 會強制執行 4 MB 的預設 ASP 回應緩衝區上限。此限制防止大型的 ASP 回應對裝載 Web 應用程式的 IIS 處理序造成不利的影響。如果 ASP 要求產生大於設定之緩衝區上限的回應,您就會遇到<徵狀>一節中所述的微狀。

解決方案

在大部分情況下,4 MB 緩衝區上限已足夠傳送至 Web 用戶端的 ASP 回應使用。如果此上限仍然不足,請使用下列其中一個方法:

方法 1:減少回應大小

如果回應大於 4 MB 預設值,此大小會時常造成不好的使用者經驗。網頁瀏覽器必須透過網路接收大型回應。接著,網頁瀏覽器必須剖析及顯示非常大的 HTML 回應。

如果接收回應的 Web 用戶端不需要將整個回應視為單一頁面,則您可以減少回應大小。例如,您可以重寫 ASP 應用程式,讓資料能在方格中呈現。因此,Web 用戶端可以一次瀏覽一頁資料。您可以使用 Microsoft ASP.NET 中的 GridView 類別達到此結果。如需有關 ASP.NET 中之 GridView 類別的詳細資訊,請造訪下列 Microsoft Developer Network (MSDN) 網站:
http://msdn2.microsoft.com/zh-tw/library/system.web.ui.webcontrols.gridview(VS.80).aspx (http://msdn2.microsoft.com/zh-tw/library/system.web.ui.webcontrols.gridview(VS.80).aspx)

方法 2:使用 Response.Flush 方法

如果您在 ASP 檔案中使用迴圈以建立大型資料表或建構資料,就可以使用 Response.Flush 方法。您使用此方法時,仍然可以使用緩衝。不過,您還是能夠完全控制傳送至 Web 用戶端的資料量,也可以控制回應的緩衝區大小。如需有關 Response.Flush 方法的詳細資訊,請造訪下列 MSDN 網站:
http://msdn2.microsoft.com/en-us/library/ms525560.aspx (http://msdn2.microsoft.com/en-us/library/ms525560.aspx)

方法 3:停用緩衝

您可以在應用程式層級,或在網頁層級停用 Web 伺服器上的緩衝。當您停用緩衝時,Web 伺服器會使用 HTTP 區塊傳輸編碼,將回應傳送至 Web 用戶端。

若要在應用程式層級停用緩衝,您可以使用 AspBufferingOn IIS Metabase 屬性。如需有關 AspBufferingOn IIS Metabase 屬性的詳細資訊,請造訪下列 Microsoft 網站:
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/fbe1bd5f-52d4-4a26-8ab1-7bb897bb3d53.mspx (http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/fbe1bd5f-52d4-4a26-8ab1-7bb897bb3d53.mspx)
若要在網頁層級停用緩衝,您可以使用 Response.Buffer 屬性。如需有關 Response.Buffer 屬性的詳細資訊,請造訪下列 MSDN 網站:
http://windowssdk.msdn.microsoft.com/en-us/library/ms526001.aspx (http://windowssdk.msdn.microsoft.com/en-us/library/ms526001.aspx)

方法 4:增加緩衝區上限

如果下列其中一種情況成立,您就可以增加緩衝上限:
  • 用戶端不是網頁瀏覽器。
  • 您無法重新設計應用程式以利用分頁技術,例如 GridView 類別。
如果您必須增加緩衝區上限,請選取已知最大回應大小的緩衝區上限。如果您事先不知道最大的回應大小,可以在測試過程中將緩衝區上限增加至很大的值。在您完成測試之後,請使用 IIS 記錄檔中 sc-bytes 欄位內的最大值,以供針對網頁所產生的回應使用。

若要增加緩衝上限,請依照下列步驟執行:
  1. 依序按一下 [開始][執行],輸入 cmd,然後按一下 [確定]
  2. 輸入下列命令,然後按 ENTER:
    cd /d %systemdrive%\inetpub\adminscripts
  3. 輸入下列命令,然後按 ENTER:
    cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize
    請注意LimitSize 代表緩衝上限大小 (以位元組為單位)。例如,數值 67108864 會將緩衝上限大小設定為 64 MB。
若要確認已正確設定緩衝區上限,請依照下列步驟執行:
  1. 依序按一下 [開始][執行],輸入 cmd,然後按一下 [確定]
  2. 輸入下列命令,然後按 ENTER:
    cd /d %systemdrive%\inetpub\adminscripts
  3. 輸入下列命令,然後按 ENTER:
    cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit

狀況說明

這是原本設計的做法。

其他相關資訊

如需有關 AspBufferingLimit IIS Metabase 屬性的詳細資訊,請造訪下列 Microsoft 網站:
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ea7e9c3f-d0c8-4e5c-8965-0d0429a3b8f1.mspx (http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ea7e9c3f-d0c8-4e5c-8965-0d0429a3b8f1.mspx)

這篇文章中的資訊適用於:
  • Microsoft Internet Information Services 6.0
關鍵字:?
kbasp kbtshoot kbprb KB925764
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。