2015-10-14 3 views
0

Наш код простслучайное подключение к SQL не может быть установлен выпуск

using (var context = dbNewsEntities.CreateContext()) 
{ 
      CheckClient(clientId, context); 

      var articles = context.GetArticlesForRSS(clientId, 0, ArchiveStartDays, false); 
} 

Случайным мы получаем вопросы SQL соединения. Я использовал windbg для проверки SqlConnection, и действительно есть 100 (по умолчанию) соединений в пуле.

Однако, когда я использую метод, описанный here, чтобы проверить эти соединения, все они закрыты. (поскольку объектом _innerConnection является System.Data.ProviderBase.DbConnectionClosedNeverOpened, а не некоторые методы, которые мы выполняли).

Что произойдет, если в бассейне будет 100 закрытых соединений? Я предполагаю, что код C# будет просто выбрать другой, кроме одного. Я прав?

Большое спасибо

+0

Какое конкретное исключение вы получаете? –

ответ

0

К сожалению, теперь я понял, что наш код не так просто, как я положил там.

Оказалось, что в другой функции был скрыт код, который не был закрыт должным образом. Если помогает любому, вы можете использовать:

SELECT 
    DBID, 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections, 
    loginame as LoginName 
FROM 
    sys.sysprocesses 
WHERE 
    dbid > 0 
GROUP BY 
    dbid, loginame 

Чтобы увидеть, как, сколько соединений в базе данных, если исключение вашей реальной системы не правильно поймала, то в WinDbg, вы можете использовать

.foreach (ex {!dumpheap -type System.Data.EntityException -short}){.echo "********************************";!pe ${ex} } 

Это будет распечатывать вам исключения и трассировки стека, которые вам нужны.