Тайм-аут соединения для сервера SQL - PullRequest
107 голосов
/ 30 ноября 2010

Можно ли увеличить время ожидания, изменив строку подключения в web.config?

Ответы [ 3 ]

209 голосов
/ 30 ноября 2010

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

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

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

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

31 голосов
/ 30 ноября 2010

Хммм ...

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

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

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

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

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

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

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

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

Возможные варианты:

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

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

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

Удачи!

11 голосов
/ 20 октября 2014

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

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

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

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

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

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

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...