共用方式為


ASP 限制 <>

概觀

元素 <limits><asp> 元素會指定下列 Active Server Pages (ASP) 連線和佇列限制, (IIS) 7:

  • bufferingLimit屬性會設定 ASP 緩衝區的大小上限。 如果開啟回應緩衝處理,此屬性會控制 ASP 頁面可以在排清發生之前寫入回應緩衝區的最大位元組數目。

  • maxRequestEntityAllowed屬性會指定 ASP 要求實體主體中允許的最大位元組數目。 如果 Content-Length 標頭存在,並指定大於 maxRequestEntityAllowed值的資料量,IIS 會傳回 HTTP 403 錯誤回應。

  • processorThreadMax屬性會指定 IIS 可能建立的每個處理器的最大背景工作執行緒數目。

    注意

    此設定可能會大幅影響 Web 應用程式的延展性,以及一般伺服器的效能。 因為這個屬性會定義可以同時執行的 ASP 要求數目上限,所以除非您的 ASP 應用程式對外部元件進行擴充呼叫,否則此設定應該維持在預設值。

  • queueConnectionTestTime屬性會指定要求可以在 ASP 判斷用戶端是否仍在連線之前排入佇列的秒數。 如果要求排入佇列的時間超過 queueConnectionTestTime 屬性所指定的秒數,ASP 會檢查用戶端是否仍在執行要求之前連線。 如果用戶端已不再連線,則不會處理要求,而且會從佇列中刪除。

    注意

    通常,使用者不會等候數秒以上的時間來處理 ASP 頁面。 雖然等候時間上限會因使用者而異,但一般接受的最大值約為 10 秒。 您可以使用 queueConnectionTestTime 屬性來確保 IIS 不會浪費時間處理使用者已放棄的要求。 這個屬性適用于讓 ASP 處理效率只到 ASP 開始處理腳本的點。 不過,腳本執行之後,您的應用程式應該使用 ASP 內建 Response 物件的 IsClientConnected 方法,繼續在適當的時間檢查用戶端 連線

  • queueTimeout屬性會指定 (以秒為單位的時間量,) 允許 ASP 腳本要求在佇列中等候。 從佇列提取要求時,系統會檢查要求是否已過期, (等候的時間超過此參數的值) 。 已過期的要求會遭到拒絕,並顯示訊息指出伺服器太忙碌。

  • requestQueueMax屬性會指定允許進入佇列的並行 ASP 要求數目上限。 當佇列已滿時,嘗試要求 ASP 檔案的任何用戶端瀏覽器都會傳送 HTTP 500 伺服器太忙碌 錯誤。

  • scriptTimeout屬性指定 (秒為單位,) ASP 頁面允許腳本在終止腳本並將事件寫入 Windows 事件記錄檔之前執行的預設時間長度。 ASP 腳本可以使用 ASP 內建Session物件的ScriptTimeout屬性來覆寫此值。 ScriptTimeout屬性可讓您的 ASP 應用程式設定較高的腳本逾時值。 例如,您可以使用此設定,藉由登入或訂購產品,來調整特定使用者建立有效會話後逾時。

相容性

版本 備註
IIS 10.0 未在 IIS 10.0 中修改專案 <limits>
IIS 8.5 未在 IIS 8.5 中修改專案 <limits>
IIS 8.0 未在 IIS 8.0 中修改專案 <limits>
IIS 7.5 未在 IIS 7.5 中修改專案 <limits>
IIS 7.0 元素 <limits><asp> 元素是在 IIS 7.0 中引進。
IIS 6.0 元素 <limits> 會取代下列 IIS 6.0 中繼基底屬性:
  • AspBufferingLimit
  • AspMaxRequestEntityAllowed
  • AspProcessorThreadMax
  • AspQueueConnectionTestTime
  • AspQueueTimeout
  • AspRequestQueueMax
  • AspScriptTimeout

安裝程式

若要在 Web 服務器上支援及設定 ASP 應用程式,您必須安裝 ASP 模組。 若要安裝 ASP 模組,請使用下列步驟。

Windows Server 2012 或 Windows Server 2012 R2

  1. 在工作列上,按一下 [伺服器管理員]
  2. [伺服器管理員] 中,按一下 [管理] 功能表,然後按一下 [新增角色及功能]。 - 在 [ 新增角色及功能 精靈] 中,按 [ 下一步]。 選取安裝類型,然後按 [ 下一步]。 選取目的地伺服器,然後按 [ 下一步]。
  3. 在 [ 伺服器角色] 頁面上,依序展開 [ Web 服務器 (IIS) ]、[ Web 服務器]、[ 應用程式開發],然後選取 [ ASP]。
    在展開的 Web Server (I S) 清單中,選取 [應用程式開發] 底下的 [S P] 螢幕擷取畫面。
  4. 如果 [ 新增 ASP? 所需的功能? ] 對話方塊隨即出現,請按一下 [ 新增功能]。 (只有在您尚未在 server 上安裝 ISAPI 擴充功能角色服務時,才會顯示此頁面。)
  5. 在 [伺服器角色] 頁面上,按 [下一步]。
  6. 在 [選取功能] 頁面上,按 [下一步]
  7. 在 [確認安裝選項] 頁面上,按一下 [安裝]
  8. 在 [結果] 頁面上,按一下 [關閉]

Windows 8 或 Windows 8.1

  1. 在 [開始] 畫面上,將指標一路移至左下角,以滑鼠右鍵按一下 [開始] 按鈕,然後按一下[主控台]。

  2. 主控台中,按一下 [程式和功能],然後按一下 [開啟或關閉 Windows 功能]。

  3. 依序展開 [Internet Information Services]、[ 萬維網服務]、[ 應用程式開發功能],然後選取 [ASP]。
    在 Windows 8 介面中選取的 S P 螢幕擷取畫面。

    注意

    如果尚未安裝 ISAPI 擴充功能角色,將會選取它。

  4. 按一下 [確定]。

  5. 按一下 [關閉] 。

Windows Server 2008 或 Windows Server 2008 R2

  1. 在工作列上,按一下 [開始],指向 [系統管理工具],然後按一下[伺服器管理員]。
  2. [伺服器管理員階層] 窗格中,展開 [角色],然後按一下 [Web 服務器] (IIS)
  3. 在 [ Web Server (IIS) ] 窗格中,捲動至 [ 角色服務 ] 區段,然後按一下 [ 新增角色服務]。
  4. 在 [新增角色服務精靈] 的 [選取角色服務] 頁面上,選取[ASP]。
    [新增角色服務精靈] 中 [應用程式開發] 底下的 [S P] 螢幕擷取畫面。
  5. 如果 [ ASP 所需的新增角色服務 ] 對話方塊出現,請按一下 [ 新增必要的角色服務]。 (只有在您尚未在 server 上安裝 ISAPI 擴充功能角色服務時,才會顯示此頁面。)
    [新增角色服務] 對話方塊的螢幕擷取畫面,其中已強調 [新增必要角色服務] 按鈕。
  6. 在 [選取角色服務] 頁面上,按 [下一步]
  7. 在 [確認安裝選項] 頁面上,按一下 [安裝]
  8. 在 [結果] 頁面上,按一下 [關閉]

Windows Vista 或 Windows 7

  1. 在工作列上,按一下 [開始],然後按一下[主控台]。
  2. 主控台中,按一下 [程式和功能],然後按一下[開啟或關閉 Windows 功能]。
  3. 依序展開 [Internet Information Services]、[ World Wide Web 服務] 和 [ 應用程式開發功能]。
  4. 選取 [ASP],然後按一下 [ 確定]。
    在 Windows Vista 或 Windows 7 介面中選取的 S P 螢幕擷取畫面。

作法

如何設定伺服器的 ASP 快取設定

  1. 開啟 [Internet Information Services (IIS) 管理員

    • 如果您使用 Windows Server 2012 或 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8 或 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows Server 2008 或 Windows Server 2008 R2:

      • 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
    • 如果您使用 Windows Vista 或 Windows 7:

      • 在工作列上,按一下 [開始],然後按一下[主控台]。
      • 按兩下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
  2. 在 [ 連線 ] 窗格中,反白顯示伺服器的名稱。

  3. 在伺服器的 [ 首頁] 窗格中,按兩下 [ASP]。
    [伺服器首頁] 窗格的螢幕擷取畫面,其中已選取 [S P]。

  4. [ASP] 窗格中,展開 [限制屬性] 區段,設定所需的設定,然後按一下 [動作] 窗格中的 [套用]。
    已展開 [限制屬性] 區段的 [A S P] 窗格螢幕擷取畫面。

組態

屬性

屬性 描述
bufferingLimit 選擇性 uint 屬性。

指定 ASP 緩衝區的大小上限,以位元組為單位。 如果開啟回應緩衝,這個屬性會控制 ASP 頁面可以在排清發生之前寫入回應緩衝區的最大位元組數目。 這個值是介於 0 到2147483647範圍內的整數。

預設值是 4194304
maxRequestEntityAllowed 選擇性 uint 屬性。

指定 ASP 要求之整個主體中允許的最大位元組數目。 這個值是介於 0 到2147483647範圍內的整數。

預設值是 200000
processorThreadMax 選擇性 uint 屬性。

指定 ASP 可以建立的每個處理器的背景工作執行緒數目上限。

預設值是 25
queueConnectionTestTime 選擇性 timeSpan 屬性。

指定時間間隔 (hh:mm:ss) 之後,ASP 會檢查用戶端在執行要求之前是否仍已連線。 如果用戶端不再連線,則不會處理要求,而且會從佇列中刪除。

預設值是 00:00:03
queueTimeout 選擇性 timeSpan 屬性。

指定 ASP 要求可以在要求佇列中等候的時間上限 (hh:mm:ss) 。

預設值是 00:00:00
requestQueueMax 選擇性 uint 屬性。

指定允許加入要求佇列的並行 ASP 要求數目上限。

預設值是 3000
scriptTimeout 選擇性 timeSpan 屬性。

指定 ASP 頁面在終止腳本並將事件寫入 Windows 事件記錄檔之前, (hh:mm:ss) 允許腳本執行的時間上限。

預設值是 00:01:30

子元素

無。

組態範例

下列組態範例會將 ASP 腳本逾時設定為 2 分鐘、ASP 將檢查用戶端是否仍在執行要求前連線到 5 秒的時間量,以及要求佇列中並行 ASP 要求的最大數目設為 1,000。

<configuration>
   <system.webServer>
      <asp>
         <cache diskTemplateCacheDirectory="%SystemDrive%\inetpub\temp\ASP Compiled Templates" />
         <limits scriptTimeout="00:02:00"
            queueConnectionTestTime="00:00:05"
            requestQueueMax="1000" />
      </asp>
   <system.webServer>
<configuration>

範例程式碼

下列程式碼範例會將 ASP 腳本逾時設定為 2 分鐘、ASP 將檢查用戶端在執行要求之前是否仍連線到 5 秒的時間量,以及要求佇列中並行 ASP 要求的最大數目設為 1,000。

AppCmd.exe

appcmd.exe set config -section:system.webServer/asp /limits.scriptTimeout:"00:02:00" /commit:apphost
appcmd.exe set config -section:system.webServer/asp /limits.queueConnectionTestTime:"00:00:05" /commit:apphost
appcmd.exe set config -section:system.webServer/asp /limits.requestQueueMax:"1000" /commit:apphost

注意

當您使用AppCmd.exe設定這些設定時,請務必將 認可 參數 apphost 設定為 。 這會將組態設定認可至ApplicationHost.config檔案中適當的位置區段。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection aspSection = config.GetSection("system.webServer/asp");

         ConfigurationElement limitsElement = aspSection.GetChildElement("limits");
         limitsElement["scriptTimeout"] = TimeSpan.Parse("00:02:00");
         limitsElement["queueConnectionTestTime"] = TimeSpan.Parse("00:00:05");
         limitsElement["requestQueueMax"] = 1000;

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim aspSection As ConfigurationSection = config.GetSection("system.webServer/asp")

      Dim limitsElement As ConfigurationElement = aspSection.GetChildElement("limits")
      limitsElement("scriptTimeout") = TimeSpan.Parse("00:02:00")
      limitsElement("queueConnectionTestTime") = TimeSpan.Parse("00:00:05")
      limitsElement("requestQueueMax") = 1000

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var aspSection = adminManager.GetAdminSection("system.webServer/asp", "MACHINE/WEBROOT/APPHOST");
var limitsElement = aspSection.ChildElements.Item("limits");
limitsElement.Properties.Item("scriptTimeout").Value = "00:02:00";
limitsElement.Properties.Item("queueConnectionTestTime").Value = "00:00:05";
limitsElement.Properties.Item("requestQueueMax").Value = 1000;

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set aspSection = adminManager.GetAdminSection("system.webServer/asp", "MACHINE/WEBROOT/APPHOST")
Set limitsElement = aspSection.ChildElements.Item("limits")
limitsElement.Properties.Item("scriptTimeout").Value = "00:02:00"
limitsElement.Properties.Item("queueConnectionTestTime").Value = "00:00:05"
limitsElement.Properties.Item("requestQueueMax").Value = 1000

adminManager.CommitChanges()