Период ожидания истек до получения соединения из пула - PullRequest
12 голосов
/ 26 марта 2011

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

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

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

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

1 Ответ

29 голосов
/ 26 марта 2011

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

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, мгновенно вызывая состояние ошибки, если вы забудете освободитьваше единственное соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...