2016-01-07 28 views
3

我們在ASP.NET應用程序中使用SignalR和js + HTML5 Web客戶端。由於需要支持羣集配置,我們還使用MS SQL Server 2008作爲SignalR的backplaneSignalR-client在短時間內發送大量請求

最近我們遇到了客戶服務器上的問題。

System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached. 

我們已經分析了前一段時間的IIS日誌,發現如下:

30分鐘,服務器我們的應用程序沒有爲請求隨着該消息在錯誤日誌響應大約一個小時收到來自同一個IP地址,並使用相同的connectionToken 724103個請求:

2015-12-28 08:18:57 10.162.4.141 POST /signalr/poll transport=longPolling&clientProtocol=1.5&connectionToken=GSUZGb0jOI3xAoMLdfDwCbjxekvIShkOXOSpg9CjpNZ1Oi4FtMEF%2BiTgf4R1lXgULv6XuQO%2F4S3wQYcfl8tj5yI0b%2Bg2%2B1KSwv0d%2FZifAbEzxa4rp28S4EHZJiMAH7A5&connectionData=%5B%7B%22name%22%3A%22messenger%22%7D%5D&orgid=1 80 - 10.162.64.142 Mozilla/5.0+(Windows+NT+6.1;+WOW64;+rv:43.0)+Gecko/20100101+Firefox/43.0 (page url - skipped) 200 0 0 15 

三個星期前,也有類似情況。我們在具有相同connectionToken的IIS日誌中發現70,000個請求,時間稍短一些。

我們不知道它是由SignalR,網絡,客戶端瀏覽器還是其他引起的。 這些事件的原因是什麼?這怎麼可以避免?

UPD1: 我們的應用程序在Intranet上運行。我們找到了這兩個用戶,並要求客戶檢查他們的電腦,但沒有發現任何可疑的東西。我們不能完全排除攻擊的可能性,但請求來自普通員工的電腦。

UPD2: 我們需要找到客戶的這種行爲的原因。 或者,有沒有辦法限制服務器端每個用戶每秒的請求數量?

回答

0

在大多數情況下,連接池問題與「數據庫連接泄漏」有關。連接很便宜,但它們會耗盡。

您需要確保您關閉了SQL連接。

var connection = new SqlConnection(ConnectionString); 
try 
{ 
    connection.Open(); 
    someCall (connection); 
} 
finally 
{ 
    connection.Close();     
} 

OR

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
    someCall(connection); 
} 

當太多的連接不被關閉時你的錯誤信息。

該錯誤可能出現在您正在使用的Microsoft.AspNet.SignalR.SqlServer軟件包中,或者可能位於您的代碼中。

此外,如果您在代碼中使用SqlDataReader或OleDbDataReader,請關閉它們。努力在使用它們時明確地關閉數據讀取器對象。

如果你想真正的規模,我建議不妨Reddis向外擴展 - 它是超級快,免費:

http://www.asp.net/signalr/overview/performance/scaleout-with-redis

+0

謝謝您的回覆!我們將看看Reddis。也許我們應該將SignalR的底板移動到一個單獨的數據庫中。 但是在日常生活中,我們對SignalR持續了六個月沒有問題。我試圖找出這些事故的原因。 – Digger2000

+0

我真的不能說這個問題實際上是在數據庫連接泄漏。我們的代碼中沒有關閉連接,但我無法對SignalR軟件包進行任何說明。 但每個用戶每秒400個請求 - 無論如何這顯然不正常。所以我會留下這個問題,因爲我們需要找到客戶這種行爲的原因。 – Digger2000