Тайм-аут соединения для SQL server



Я могу увеличить тайм-аут, изменив строку подключения в файле web.config?

1853   3  

3 ответов:

Да, вы можете добавить ;Connection Timeout=30 на строку подключения и укажите значение, которое вы хотите.

значение таймаута, установленное в Connection Timeout свойство время в секундах. Если это свойство не задано, значение тайм-аута для соединения является значением по умолчанию (15 секунд).

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

значение 0 указывает на отсутствие ограничений, и его следует избегать в a ConnectionString, потому что попытка подключения ждет бесконечно.

Хммм...

Как сказал Дарин, вы можете указать более высокое значение тайм-аута соединения, но я сомневаюсь, что это действительно проблема.

когда вы получаете тайм-ауты соединения, это обычно проблема с одним из следующих:

  1. конфигурация сети-Медленное соединение между вашим веб-сервером/dev box и SQL server. Увеличение таймаута может исправить это, но было бы разумно исследовать лежащие в основе проблема.

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

  3. строка подключения 2: Если вы указываете имя сервера неправильно или не полностью (например,mysqlserver вместо mysqlserver.webdomain.com), вы получите тайм-аут. Вы можете пинговать сервер, используя имя сервера именно так, как указано в строке подключения из командной строки?

  4. строка подключения 3: Если имя сервера находится в вашем DNS (или hosts-файле), но указывает на неправильный или недоступный IP-адрес, вы получите тайм-аут, а не ошибку machine-not-found-ish.

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

  6. утечки соединения. Сколько процессов запущено? Сколько открытых соединений? Я не уверен, что сырой ADO.NET выполняет пул соединений, автоматически закрывает соединения при необходимости Ala Enterprise Library или где все это настроено. Это, наверное, отвлекающий маневр. Однако при работе с WCF и веб-службами у меня были проблемы с незамкнутыми соединениями вызывая тайм-ауты и другое непредсказуемое поведение.

вещи, чтобы попробовать:

  1. вы получаете тайм-аут при подключении к серверу с SQL Management Studio? Если это так, сетевая конфигурация, вероятно, проблема. Если вы не видите проблемы при подключении к Management Studio, проблема будет в вашем приложении, а не с сервером.

  2. запустите SQL Profiler и посмотрите, что на самом деле происходит по проводу. Вы должны быть в состоянии сказать, если вы действительно подключаетесь, или если запрос является проблемой.

  3. запустите запрос в среде Management Studio и посмотрите, сколько времени это займет.

удачи!

Если вы хотите динамически изменить его, я предпочитаю использовать SqlConnectionStringBuilder .

Это позволяет конвертировать ConnectionString т. е. строку в объект класса, все свойства строки подключения станут его членом.

в этом случае реальным преимуществом было бы то, что вам не нужно беспокоиться о том, если часть строки ConnectionTimeout уже существует в строке подключения или нет?

также как он создает объект и его всегда хорошо назначать значение в объекте, а не манипулировать строкой.

вот пример кода:

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);

Comments

    Ничего не найдено.