我们在Azure网络应用程序中运行的Ado.net遇到问题,当我们尝试打开连接时,有时它永远不会超过connection.open语句。我们正在一个任务中运行连接,该任务的超时超过连接超时的两倍。
任务超时为31秒,连接超时为15秒。发生的事情是任务超时,我们永远不会得到连接。但是,如果我们查看进程转储,则连接池仅具有其最小连接数(50),这本身对于应用程序来说已经足够了。一旦这种情况开始发生,我们通常会在最终排除故障之前的几分钟内出现故障。
这是代码的缩减版本:
var task = Task.Factory.StartNew(() => OpenAndRun(cmd, trackingId));
if (task.Wait(31000, token)) return task.Result;
private static SqlDataReader OpenAndRun(SqlCommand sqlCommand)
{
sqlCommand.CommandTimeout = 15;
sqlCommand.Connection.Open();
return sqlCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
这是连接字符串:
<add name="conn"
connectionString="data source=ddd;initial catalog=ccc;user id=uuu;password=ppp;Min Pool Size=50;Max Pool Size=500;TimeOut=180;application name=aaaaa"
providerName="System.Data.EntityClient" />
我们的数据库有足够的额外连接容量。
我们尝试过的事情: