顯示具有 同時連線數 標籤的文章。 顯示所有文章
顯示具有 同時連線數 標籤的文章。 顯示所有文章

2025年5月6日 星期二

[研究]如何限制 ASP.NET WebForm Web Application 網站的同時連線數 ? 總連線數 ?

[研究]如何限制 ASP.NET WebForm Web Application 網站的同時連線數 ? 總連線數 ?

2025-05-06

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

在 ASP.NET WebForms Web Application 網站中,要限制「同時連線數(Concurrent Connections)」或「總連線數(Total Connections)」可以透過以下幾種方式實現:


一、使用 IIS(Internet Information Services)限制

[研究]如何限制 IIS 或 IIS 底下網站的同時連線數 ? 總連線數 ?

https://shaurong.blogspot.com/2025/05/iis-iis.html

注意:此功能可能在 Windows Server 的 Standard / Datacenter 版才完整支援,在 Windows 10/11 或非伺服器版本中可能有內建限制(如 10 個連線限制)。


二、使用 web.config 中的 httpRuntime 元素限制

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="4096" requestQueueLimit="100" />   
  </system.web>
</configuration>

requestQueueLimit:設定在工作執行緒忙碌時,最多排隊多少個請求(超過會返回 503)。

這不直接限制同時連線數,但可以限制高佇列情況的行為。


三、在 Global.asax 中程式碼實作限制(應用程式層級控制)

實作同時處理請求的簡易方式(不建議大規模使用)

private static int _currentRequestCount = 0;
private static int _maxRequestCount = 100;

void Application_BeginRequest(object sender, EventArgs e)
{
    if (Interlocked.Increment(ref _currentRequestCount) > _maxRequestCount)
    {
        Response.StatusCode = 503; // Service Unavailable
        Response.End();
    }
}

void Application_EndRequest(object sender, EventArgs e)
{
    Interlocked.Decrement(ref _currentRequestCount);
}

優點:簡單可控

缺點:不考慮非同步請求、重載和分散式部署下的準確性。


四、總結

方法可限制適用情境備註
IIS Connection Limits同時連線數一般部署簡單有效
web.config httpRuntime佇列長度小型網站間接控制
Global.asax 控制同時請求精細管控可程式化

(完)

相關

[研究]如何限制 IIS 或 IIS 底下網站的同時連線數 ? 總連線數 ?
https://shaurong.blogspot.com/2025/05/iis-iis.html

[研究]如何限制 ASP.NET WebForm Web Application 網站的同時連線數 ? 總連線數 ?
https://shaurong.blogspot.com/2025/05/aspnet-webform-web-application.html


[研究]如何限制 IIS 或 IIS 底下網站的同時連線數 ? 總連線數 ?

[研究]如何限制 IIS 或 IIS 底下網站的同時連線數 ? 總連線數 ?

2025-04-21

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

在 IIS(Internet Information Services)中,**直接限制「同時連線數」或「總連線數」**的方法不像 Apache 那樣明確,但還是可以透過幾種不同的方式來「間接達成限制目的」,以下針對 IIS 整體與單一網站分別說明:

一、限制 IIS 整體的同時連線數(或總連線數)

方法 1:透過「Windows 註冊表」修改 MaxConnections

1.開啟「登錄編輯器」 (regedit)

2.位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

3.新增或編輯 DWORD 值:

MaxUserPort:設定最大的用戶端連接埠數(預設值、最大值 65534;最小值 5000)

TcpNumConnections:設定允許的最大 TCP 連線數(如 100)(預設值不存在,會使用最大值;最大值十進位:16777214,十六進位:0xFFFEFFFF )

4.重新啟動系統。

注意:這會影響整個 Windows 系統的 TCP 連線,不只是 IIS!

********************************************************************************

二、限制 IIS 特定網站的同時連線數

方法 1:使用「IIS 管理員」設定「連線限制」

1.開啟 IIS 管理員

2.選取你要限制的 網站名稱

3.點選 「Advanced Settings(進階設定)」 或右側的 「限制(Limits)」(Windows 版本不同會略有不同)

4/在「Connection Limits」中設定:Limit number of connections(限制最大連線數)、Connection timeout(連線逾時秒數)






方法 2:透過 applicationHost.config 或 web.config

在 applicationHost.config 中可以手動加入限制(全站):

<system.applicationHost>
  <sites>
    <site name="YourSiteName" id="1">
      <limits connectionTimeout="00:01:00" maxConnections="100" />   
    </site>
  </sites>
</system.applicationHost>

********************************************************************************

📊 備註:監控目前連線數

若要查看目前連線數,可透過下列方式:

netstat -an | findstr :80 | find /c "ESTABLISHED"

netstat -an | findstr :443| find /c "ESTABLISHED"


Performance Monitor(效能監視器)

加入 Web Service > Current Connections 計數器。







🧩 額外補充

若你是 IIS Express,則不支援連線限制。

若要依 IP 限制 或 時間段限制,需搭配 IP 安全性規則 或寫入中介軟體(如 URL Rewrite + Dynamic IP Restrictions)。

是否需要針對「單一 IP」或「API 呼叫數」做限制?這樣可能要搭配其他防護措施(如 Application Gateway、反向代理、防火牆等)。

(完)

相關