Подтвердить что ты не робот

Период ожидания, прошедший до получения соединения из пула

Я получил ошибку:

ошибка: время ожидания истекло. Период ожидания истекает до получения соединения из пула. Возможно, это произошло из-за того, что все объединенные соединения использовались и максимальный размер пула был достигнут.

Это происходит, когда я останавливаю IIS после долгого ожидания ответа в браузере. Если я пытаюсь подождать, тогда я получаю сообщение об ошибке An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll, но я получил ошибку, написанную очень старым. Я просто пишу новую команду, которая не получила никакого исключения. [Я думаю, что первая ошибка запуска сначала получила ошибку, поэтому всякая новая ошибка никогда не может дать исключение].

Так что мне нужно сделать, чтобы решить эту проблему.

4b9b3361

Ответ 1

Ошибка означает, что пул соединений не подключен. Обычная причина - забыть закрыть соединение после его использования, например:

var con = new MySqlConnection("Server=YourDB;Database=YourDb;...");
con.Open();
var com = con.CreateCommand();
com.CommandText = "select * from YourTable";

Этот код забывает закрыть соединение, поэтому в пуле меньше одного соединения. Вы можете исправить это, добавив:

con.Close();

в конце. Но если запрос генерирует исключение, Close будет пропущен, и вы все равно снизьте 1 соединение.

Гораздо лучший способ - это оператор using:

using (var con = new MySqlConnection("Server=YourDB;Database=YourDb;..."))
{
    con.Open();
    var com = con.CreateCommand();
    com.CommandText = "select * from YourTable";
}

Вы можете легко устранить эту проблему, добавив max pool size в конце вашего соединения, например:

Server=YourDB;Database=YourDbUid=YourUser;Pwd=YourPwd;max pool size=1;

Это дает вам размер пула 1, мгновенно вызывая ошибку, если вы забудете освободить одно соединение.