无法从ado.net

时间:2017-12-14 15:36:34

标签: sql-server ado.net

我们在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" />

我们的数据库有足够的额外连接容量。

我们尝试过的事情:

  1. 增加最小池大小。这似乎没什么区别。
  2. 减小最小池大小。查看进程转储,我们可以看到我们的应用程序在需要时可以从最小池大小上升。

0 个答案:

没有答案