Иногда работает подключение к SQL Server

Приложение ADO.Net иногда может подключаться к другому серверу в локальной сети. Кажется случайным, является ли данная попытка подключения успешной или неудачной. Соединение использует строку соединения в форме:

Сервер = THESERVER\TheInstance; База данных = TheDatabase; Идентификатор пользователя = TheUser; Password = ThePassword;

возвращенная ошибка:

Время ожидания подключения истекло. Период времени ожидания истек, пытаясь использовать подтверждение квитирования до входа в систему.
Это может быть связано с тем, что рукопожатие до входа в систему не удалось или сервер не смог ответить вовремя.
Продолжительность, затрачиваемая при попытке подключения к этому серверу, была - [Pre-Login] initialization = 42030; квитирование = 0;

Приложение .NET - небольшое тестовое приложение, которое выполняет следующий код:

using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
    conn.Open();
    int rowCount = (int)cmd.ExecuteScalar();
}

TheTable небольшой, всего 78 строк.

Однако на той же машине, где приложение .NET получает эту ошибку, я могу подключиться к THESERVER с помощью SSMS и User Id/Password, названного в строке подключения.

Почему подключение может быть отключено от приложения ADO.Net, но с использованием идентичных учетных данных из SSMS?

Ответ 1

Оказалось, что TCP/IP был включен для IPv4-адреса, но не для IPv6-адреса, THESERVER.

По-видимому, некоторые попытки подключения оказались с использованием IPv4, а другие - IPv6.

Включение TCP/IP для обеих версий IP устраняет проблему.

Тот факт, что SSMS работал, оказался случайным (первые несколько попыток предположительно использовались IPv4). Некоторые последующие попытки подключения через SSMS привели к тому же сообщению об ошибке.

Чтобы включить TCP/IP для дополнительных IP-адресов:

  • Запустить диспетчер конфигурации сервера Sql
  • Откройте node Конфигурация сети SQL Server
  • Щелкните левой кнопкой мыши по протоколам для MYSQLINSTANCE
  • В правой панели щелкните правой кнопкой мыши TCP/IP
  • Нажмите "Свойства"
  • Выберите вкладку IP-адреса
  • Для каждого указанного IP-адреса убедитесь, что Active и Enabled оба являются Да.

Ответ 2

У меня возникла такая же ошибка, которая подозрительно выровнялась с последним раундом обновлений Microsoft (09/02/2016). Я обнаружил, что SSMS подключен без проблем, в то время как мое приложение ASP.NET вернуло "период времени ожидания, истекший при попытке использовать подтверждение подтверждения квитирования"

Решение для меня состояло в том, чтобы добавить в строку соединения время ожидания 30 секунд, например:

ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"

В моей ситуации единственное затронутое соединение - это тот, который использует интегрированную систему безопасности, и я был олицетворял пользователя перед подключением, другие соединения с тем же сервером с использованием SQL Authentication работали нормально!

В то же время пострадали 2 тестовые системы (отдельные клиенты и серверы Sql), что привело меня к подозрению в обновлении микрософт!

Ответ 3

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

  • Запустить диспетчер конфигурации сервера Sql
  • Откройте node Конфигурация сети SQL Server
  • Щелкните левой кнопкой мыши по протоколам для MYSQLINSTANCE
  • В правой панели щелкните правой кнопкой мыши TCP/IP
  • Нажмите "Свойства"
  • Выберите вкладку IP-адреса
  • Для каждого указанного IP-адреса убедитесь, что Active и Enabled оба являются Да.

И

  • Для каждого указанного IP-адреса убедитесь, что TCP-динамические порты пусты, а TCP-порт = 1433 (или какой-либо другой порт)
  • Откройте брандмауэр Windows и убедитесь, что порт открыт в входящих соединениях

Ответ 4

У меня была такая же проблема, когда я пытался подключиться к серверу в локальной сети (через VPN) из Visual Studio при настройке модели данных сущностей.
Успешно решить только путем установки TransparentNetworkIPResolution=false в строке подключения. В VS Add Connection Wizard вы можете найти его на вкладке "Дополнительно".

Ответ 5

У меня возникла такая же проблема с рукопожатием при подключении к размещенному серверу.

Я открыл свою сеть и центр обмена и включил IPv6 в своем беспроводном сетевом подключении.

enter image description here

Ответ 6

Мой исполняемый файл, который был создан с использованием .NET Framework 3.5, начал сообщать об этих проблемах подключения примерно в половине случаев после того, как недавно были установлены некоторые обновления Windows (неделя от 7 августа 2017 г.).

Ошибки подключения были вызваны .NET Framework 4.7, которые были установлены на целевом компьютере (включена автоматическая установка Windows Updates) - https://support.microsoft.com/?kbid=3186539

Удаление .NET Framework 4.7 устраняет проблемы с подключением.

По-видимому, существует разрывное изменение .Net Framework 4.6.1 - TransparentNetworkIPResolution Обновление строки подключения согласно статье также решило проблему без необходимости отката версии фреймворка.

Ответ 7

Я исправил эту ошибку в Windows Server 2012 и SQL Server 2012, включив IPv6 и разблокировав входящий порт 1433.

Ответ 8

У меня была такая же проблема, мне удалось решить ее с помощью открытия/включения порта 1433 и tcp/ip в диспетчере конфигурации SQL Server, а затем Restarted сервера p >

введите описание изображения здесь

Ответ 9

В моем случае выше всех параметров уже есть.

Решил его, увеличив время ожидания соединения = 30. SQL Server management Studio

Ответ 10

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

Ответ 11

У меня была эта проблема, когда я переносил SharePoint 2010 на 2013. Я подозревал, что, поскольку сервер базы данных находится на другой стороне брандмауэра, который не маршрутизирует IP6, а затем пытается использовать IP6 и не удается подключиться к базе данных.

Думаю, теперь проблема решена. Ошибки, похоже, прекратились. Что я сделал, так это просто отключил IP6 (отключив его) для сетевого адаптера на серверах SharePoint.

Ответ 12

У меня была такая же проблема, но я подключался к удаленному db, используя статический IP-адрес. Поэтому ни одна из вышеперечисленных решений не решила мою проблему.

Мне не удалось добавить правильное сопоставление пользователей для входа в систему безопасности, который я использовал, поэтому для меня было просто убедиться, что для параметра User Mapping установлено значение для доступа к моей базе данных.

Ответ 13

Ошибка "Время ожидания подключения истекло" обычно происходит в следующих случаях:

  • Экземпляр SQL Server Database Engine не запущен.
  • Служба браузера SQL Server не запущена.
  • TCP/IP отключен.
  • Имя сервера было введено неверно.
  • Существуют сетевые проблемы.
  • Порт TCP/IP для экземпляра Database Engine блокируется брандмауэром.
  • Клиент и сервер не настроены на использование одного и того же сетевого протокола.

Чтобы проверить, как трассировать эту ошибку на основе вышеуказанных причин, отметьте Истекло время ожидания подключения. Период ожидания истек, пытаясь использовать подтверждение подтверждения авторизации перед входом

Ответ 14

Решена эта проблема, заблокировав/занесенный в черный список IP-адрес, который пытается переустановить учетные записи пользователей. Проверьте свои журналы доступа SQL для большого количества неудачных попыток входа в систему (обычно для учетной записи "sa" ).

Ответ 15

Для меня получается, что брандмауэр в Windows Server блокировал порт 1433, который является портом сервера SQL по умолчанию. Поэтому добавление входящего правила для принятия этих соединений помогло мне.

Ответ 16

В нашем случае проблема возникла из-за доступности кластера. Чтобы решить эту проблему, мы должны были установить MultiSubnetFailover в True в строке подключения.

Подробнее о MSDN

Ответ 17

В моем случае, параметр Persist Security Info=true с пользователем и паролем в строке подключения вызывает проблему. Удаление параметра или значение false решают проблему.

Ответ 18

Попробуйте выполнить простой перезапуск SQL Server, прежде чем делать что-либо радикальное. Может это исправить. Это сделал для меня