| 類型 | 發生層級 | 預設值 | 配置位置 | 關鍵屬性/設定 | 單位 |
|---|---|---|---|---|---|
| 1. ASP.NET 請求執行超時 | HttpRuntime | 90 秒 | web.config <httpRuntime> | executionTimeout="180" | 秒 |
| 2. IIS 請求佇列/處理超時 | IIS (網站/應用程式池) | 90 秒 (IIS 6/7) | IIS 管理器 → 網站/應用程式池 → 進階設定 | 連線逾時 / 閒置逾時 / Ping 最大回應時間 | 秒 |
| 3. 資料庫連線超時 | ADO.NET 連線池 | 15 秒 | 連線字串 | Connect Timeout=30 | 秒 |
| 4. 資料庫命令執行超時 | SqlCommand / EF CommandTimeout | 30 秒 | 代碼 / DbContext | command.CommandTimeout = 180; / ctx.Database.CommandTimeout = 180 | 秒 |
| 5. 應用程式池回收/閒置超時 | IIS 應用程式池 | 20 分鐘閒置 / 1740 分鐘定期 | 應用程式池 → 進階設定 → 回收/處理模型 | 閒置超時 / 定期回收時間 / 特定時間回收 | 分鐘 |
| 6. Web Service / WCF 呼叫超時 | Proxy / Channel | 1 分鐘 (ASMX) / 10 分鐘 (WCF) | 代碼 / config | proxy.Timeout = 120000; / binding.sendTimeout | 毫秒 / 時分秒 |
注意: `debug="true"` 時 `executionTimeout` 無效 (無限等待),生產環境必須 `debug="false"`。
Connect Timeout:建立 TCP 連線+登入驗證的上限Min/Max Pool Size:高併發預熱連線池,避免連線建立抖動
// 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 控制
// ASMX Proxy
var svc = new MyServiceSoapClient();
svc.Timeout = 300000; // 5 分鐘,單位毫秒
// 或
svc.Timeout = System.Threading.Timeout.Infinite; // 無限等待 (慎用)
// WCF Binding Config