簡體   English   中英

如何配置WCF以處理大量並發用戶?

[英]How to configure WCF to handle lots of concurrent users?

我們正在開發一個利用WCF + SQL Azure進行數據訪問的多租戶系統。 基本上,我們在客戶端連接到的Azure中托管了WCF服務,然后此WCF服務向SQL數據庫查詢數據並將數據返回給客戶端。 其他所有工作都很好,但是客戶端和WCF之間的通道存在一些奇怪的性能問題。

似乎如果有足夠的並發用戶使用我們的服務,則WCF將開始阻止連接。 “足夠”是指大約20-30個用戶,它們每秒大約執行1個查詢,這反過來又應該是我希望WCF能夠毫無問題地處理的東西。 每個查詢在WCF服務中花費的時間少於1秒,通常為100到200ms。

我們認為WCF阻止連接的原因是:

  1. 我們同時記錄了WCF服務所花費的時間和WCF調用所花費的時間,兩者之間有很大的差異。 例如,在WCF服務中花費的時間可能為100毫秒,而總時間(從客戶的角度來看)可能為5000毫秒甚至10000毫秒。
  2. 客戶端可能運行良好,直到達到第一個峰值。 后續呼叫將花費很長時間甚至超時。
  3. 有時客戶端根本無法連接到服務。

WCF服務正在使用netTcpBinding,並配置了以下設置:

ServicePointManager.DefaultConnectionLimit = 1024;
netTcpBinding.MaxConnections = 1024;
netTcpBinding.SendTimeout = 5 minutes
netTcpBinding.ReceiveTimeout = 5 minutes
serviceThrottlingBehavior.MaxConcurrentCalls = 1024;
serviceThrottlingBehavior.MaxConcurrentInstances = 1024;
serviceThrottlingBehavior.MaxConcurrentSessions = 1024;

我不確定這是否重要,但是所有客戶端都位於同一IP地址之后。 此外,將為每個請求打開和關閉通道(主要是因為Azure在空閑1分鍾后會關閉連接,而我們還無法弄清楚如何以健壯的方式處理該連接)。

有任何想法嗎?

以下問題與此相關,但實際上並沒有提供答案: 如何擴展SQL Azure? SQL Azure vs WCF性能

在WCF中啟用診斷,它將幫助您發現問題。

再次查看您的限制配置:

http://msdn.microsoft.com/en-us/library/ms731379.aspx

http://msdn.microsoft.com/en-us/library/vstudio/ms735114(v=vs.100).aspx

http://www.codeproject.com/Articles/33362/WCF-Throttling

如果要傳輸大對象,請將默認的TransferMode更改為Streammed。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM