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

WCF 分散式開發常見錯誤 (20):TimeoutException —— 服務節流 行為 解決高併發超時

     編輯:關於.NET

大量用戶端並發呼叫 WCF 服務時,頻繁出現 TimeoutException:「未在 00:01:00 內完成開啟操作」。根因在於預設服務節流限制過低,導致請求排隊超時。解決關鍵在於調整 serviceThrottling 行為參數。

錯誤現場

  • 100 個用戶端同時實例化 Proxy 發送請求;
  • 服務端邏輯延遲 100ms 模擬處理;
  • 約第 10 個請求開始阻塞,最終超時。

TimeoutException 錯誤畫面

解決方案:調整 serviceThrottling

在 <serviceBehaviors> 中加入:

<behavior name="WCFService.WCFServiceBehavior">
  <serviceTimeouts transactionTimeout="00:01:00" />
  <serviceMetadata httpGetEnabled="true" />
  <serviceDebug includeExceptionDetailInFaults="false" />
  <serviceThrottling 
      maxConcurrentCalls="1000" 
      maxConcurrentInstances="1000" 
      maxConcurrentSessions="1000" />
</behavior>

三大參數說明

參數說明
maxConcurrentCalls整個 ServiceHost 同時處理的訊息上限
maxConcurrentInstances服務同時執行的 InstanceContext 上限
maxConcurrentSessionsServiceHost 可接受的會話上限

依實際硬體資源與服務模式(PerCall/PerSession/Singleton)調整數值,重啟服務即可生效。

補充建議

  • 搭配 reliableSession 或 wsHttpBinding 可靠會話時,需同步調整會話節流;
  • 監控效能計數器 ServiceModelService 4.0.0.0\Calls Outstanding 觀察佇列積壓;
  • 若仍超時,檢查資料庫連線池、外部服務呼叫等下游瓶頸。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved