首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 請求超時全景圖:六大超時類型成因與配置對策完整版

     編輯:ASP.NET 基礎

六大超時分類與配置對照表

類型發生層級預設值配置位置關鍵屬性/設定單位
1. ASP.NET 請求執行超時HttpRuntime90 秒web.config <httpRuntime>executionTimeout="180"秒
2. IIS 請求佇列/處理超時IIS (網站/應用程式池)90 秒 (IIS 6/7)IIS 管理器 → 網站/應用程式池 → 進階設定連線逾時 / 閒置逾時 / Ping 最大回應時間秒
3. 資料庫連線超時ADO.NET 連線池15 秒連線字串Connect Timeout=30秒
4. 資料庫命令執行超時SqlCommand / EF CommandTimeout30 秒代碼 / DbContextcommand.CommandTimeout = 180; / ctx.Database.CommandTimeout = 180秒
5. 應用程式池回收/閒置超時IIS 應用程式池20 分鐘閒置 / 1740 分鐘定期應用程式池 → 進階設定 → 回收/處理模型閒置超時 / 定期回收時間 / 特定時間回收分鐘
6. Web Service / WCF 呼叫超時Proxy / Channel1 分鐘 (ASMX) / 10 分鐘 (WCF)代碼 / configproxy.Timeout = 120000; / binding.sendTimeout毫秒 / 時分秒

詳細配置範例

1. ASP.NET 執行超時 (web.config)



  
  

注意: `debug="true"` 時 `executionTimeout` 無效 (無限等待),生產環境必須 `debug="false"`。

2. IIS 設定 (應用程式池進階設定)

  • 處理模型 → 閒置超時 (分鐘):預設 20,設 0 禁用。長時間無請求卸載 worker process 釋放記憶體
  • 回收 → 定期回收時間 (分鐘):預設 1740 (29 小時),錯開尖峰時段 (如 03:00)
  • 回收 → 特定時間:每日固定時間回收,適合已知記憶體洩漏緩解
  • Ping 最大回應時間:Worker process 健康檢查逾時,預設 90 秒,調大避免誤殺長跑請求

3. 連線字串超時



  

  • Connect Timeout:建立 TCP 連線+登入驗證的上限
  • Min/Max Pool Size:高併發預熱連線池,避免連線建立抖動

4. 命令執行超時 (ADO.NET / EF)


// ADO.NET
using (var cmd = new SqlCommand("usp_BigReport", conn) { CommandType = CommandType.StoredProcedure }) {
    cmd.CommandTimeout = 300; // 5 分鐘
    var reader = cmd.ExecuteReader();
}

// Entity Framework 6
using (var ctx = new MyContext()) {
    ctx.Database.CommandTimeout = 300;
    var data = ctx.BigTable.Where(...).ToList();
}

// EF Core
var data = await ctx.BigTable.Where(...).ToListAsync(); // 預設無限制,受 DbCommand.CommandTimeout 控制

5. Web Service (ASMX) / WCF 超時


// ASMX Proxy
var svc = new MyServiceSoapClient();
svc.Timeout = 300000; // 5 分鐘,單位毫秒
// 或
svc.Timeout = System.Threading.Timeout.Infinite; // 無限等待 (慎用)

// WCF Binding Config

  
    
  

排查思路:由外而內

  1. 瀏覽器顯示「請求逾時」→ 檢查 IIS 日誌 `sc-status=500, sc-win32-status=1236` (連線逾時)
  2. 事件檢視器 → System/Application → WAS/ASP.NET 錯誤
  3. SQL Profiler / Extended Events → 觀察長跑查詢、阻塞
  4. 程式碼執行緒分析 → 死循環、同步阻塞、大量序列化

最佳實踐原則

  • 分層設定超時:外層 (IIS/ASP.NET) > 內層 (DB/WS),確保外層給內層足夠緩衝
  • 區分讀/寫超時:報表查詢 5-10 分鐘,OLTP 寫入 30 秒
  • 監控而非單純加大:記錄慢查詢、慢請求,優化索引/分頁/非同步才是根治
  • 非同步模式:長跑操作改為 `async/await` + 輪詢/SignalR 推送,避免阻塞執行緒
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved