问题描述
我在IIS 8.5上遇到奇怪的行为。在消耗了几次端点后(5-6次),我得到一个错误:在从池中获取连接之前,超时时间已经过去。发生这种情况的原因可能是所有池化连接都在使用中,并且达到了最大池大小。
我的代码是用net core 3.1编写的,并连接到sql server并尝试执行存储过程。它可以在本地处理任意数量的呼叫。在本地验证,不会引发任何异常。
public int GetCount()
{
int jobCount = 0;
using (sqlCommand com = new sqlCommand("dbo.GETCount",new sqlConnection(this.ConnectionString)) { CommandType = CommandType.StoredProcedure })
{
com.Parameters.Add(new sqlParameter("@jobCount",sqlDbType.Int) { Direction = ParameterDirection.Output });
try
{
com.Connection.open();
com.ExecuteNonQuery();
jobCount = (int)com.Parameters[0].Value;
}
catch (Exception)
{
throw;
}
finally
{
com.Connection.Close();
}
}
return jobCount;
}
有什么建议吗?
解决方法
这是我的建议。
-
始终在finally块中关闭连接
-
增加池大小,如在连接字符串中
string connectionString =“数据源=本地主机;初始目录= Northwind;” +
“集成安全性= SSPI;最小池大小= 10;最大池大小= 100”;
-
完全不使用池化
string connectionString =“数据源=本地主机;初始目录= Northwind;” +
“ Integrated Security = SSPI; Pooling = false;”;