Подключение к SQL Server иногда работает
An ADO.Net приложение только иногда может подключиться к другому серверу в локальной сети. Кажется случайным, является ли данная попытка подключения успешной или неудачной. Соединение использует строку подключения в виде:
сервер=сервер TheInstance; базы данных=базы данных;идентификатор пользователя=Пользователь; пароль=пароль;
код ошибки:
Истек Тайм-Аут Соединения. Время ожидания истекло при попытка использовать подтверждение рукопожатия перед входом в систему.
Это может быть связано с тем, что не удалось выполнить рукопожатие перед входом в систему или сервер не смог ответить вовремя.
Время, затраченное при попытке подключиться к этому серверу, было-[Pre-Login] initialization=42030; handshake=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 получает эту ошибку, я могу подключиться к серверу с помощью SSMS и идентификатора пользователя/пароля, указанного в строке подключения.
почему может произойти сбой соединения ADO.Net приложение, но преуспеть с идентичными учетными данными из SSMS?
14 ответов:
оказалось, что TCP / IP был включен для адреса IPv4, но не для адреса IPv6, из
THESERVER.по-видимому, некоторые попытки подключения закончились использованием IPv4, а другие использовали IPv6.
включение TCP / IP для обеих версий IP решило проблему.
тот факт, что SSMS работал, оказался случайным (первые несколько попыток предположительно использовали IPv4). Некоторые более поздние попытки подключиться с помощью среды SSMS в результате та же ошибка сообщение.
чтобы включить TCP / IP для дополнительных IP-адресов:
- Запустите Диспетчер Конфигурации Sql Server
- откройте узел конфигурация сети SQL Server
- щелкните левой кнопкой мыши протоколы для MYSQLINSTANCE
- в правой панели щелкните правой кнопкой мыши TCP / IP
- Выберите Свойства
- выберите вкладку IP-адреса
- для каждого указанного IP-адреса убедитесь, что активны и включены оба Да.
У меня была такая же ошибка, которая только что появилась, которая подозрительно совпала с последним раундом обновлений Microsoft (09/02/2016). Я обнаружил, что SSMS подключен без проблем, пока мой ASP.NET приложение вернуло ошибку "тайм-аут, истекший при попытке использовать подтверждение квитирования перед входом в систему"
решение для меня было добавить тайм-аут соединения 30 секунд в строку подключения, например:
ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"в моем случае это влияет только на подключение был ли тот, который использовал интегрированную безопасность, и я олицетворял пользователя перед подключением, другие соединения с тем же сервером с использованием проверки подлинности SQL работали нормально!
2 тестовые системы (отдельные клиенты и Sql-серверы) были затронуты в то же время, что привело меня к подозрению в обновлении microsoft!
Я решил проблему, как Эрик, но с некоторыми другими изменениями:
- Запустите Диспетчер Конфигурации Sql Server
- откройте узел конфигурация сети SQL Server
- щелкните левой кнопкой мыши протоколы для MYSQLINSTANCE
- в правой панели щелкните правой кнопкой мыши TCP / IP
- Выберите Свойства
- выберите вкладку IP-адреса
- для каждого указанного IP-адреса убедитесь, что активны и включены оба Да.
и
- для каждого указанного IP-адреса убедитесь, что динамические порты TCP пусты и TCP-порт = 1433 (или какой-либо другой порт)
- откройте Брандмауэр windows и убедитесь, что порт открыт во входящих соединениях
У меня была та же проблема, пытаясь подключиться к серверу в локальной сети (через VPN) из Visual Studio, при настройке модели данных сущности.
Удалось решить только установивTransparentNetworkIPResolution=falseв строке подключения. В Мастере VS Add Connection вы можете найти его на вкладке Дополнительно.
У меня была такая же проблема с рукопожатием при подключении к хост-серверу.
Я открыл Центр управления сетями и общим доступом и включил IPv6 в своем беспроводном сетевом соединении.
мой исполняемый файл, построенный с использованием .NET Framework 3.5, начал сообщать об этих проблемах с подключением примерно в половине случаев после того, как некоторые обновления Windows были установлены недавно (неделя 7 августа 2017 года).
сбои подключения были вызваны .NET Framework 4.7, который был установлен на целевом компьютере (автоматическая установка обновлений Windows была включена) -https://support.microsoft.com/?kbid=3186539
удаление .NET Framework 4.7 решенное соединение проблемы.
видимо, есть нарушение изменения .Чистый Рамках 4.6.1 - TransparentNetworkIPResolution Обновление строки подключения в соответствии со статьей также решило проблему без необходимости отката версии платформы.
я исправил эту ошибку в Windows Server 2012 и SQL Server 2012, включив IPv6 и разблокировав входящий порт 1433.
У меня была эта проблема, когда я сделал миграцию SharePoint 2010 в 2013. Я подозревал, что, поскольку сервер базы данных находится на другой стороне брандмауэра, который не маршрутизирует IP6, он пытался использовать IP6 и не смог подключиться к базе данных.
Я думаю, что вопрос теперь решен. Ошибки, похоже, прекратились. Я просто отключил IP6 (сняв флажок) для сетевого адаптера на серверах SharePoint.
У меня была такая же проблема, но я подключался к удаленной БД, используя статический IP-адрес. Таким образом, ни одно из вышеперечисленных решений не решило мою проблему.
Мне не удалось добавить правильное сопоставление пользователей для входа в систему безопасности, который я использовал, поэтому решение для меня состояло в том, чтобы просто убедиться, что параметр сопоставления пользователей установлен для доступа к моей базе данных.
ошибка "тайм-аут соединения истек" обычно возникает в следующих случаях
- экземпляр компонента SQL Server Database Engine не запущен.
- служба браузера SQL Server не запущена.
- TCP / IP отключен.
- имя сервера было введено неправильно.
- есть проблемы с сетью.
- порт TCP / IP для экземпляра компонента Database Engine блокируется брандмауэром.
- клиент и сервер не настроен на использование одного и того же сетевого протокола.
чтобы проверить, как отследить эту ошибку на основе вышеуказанных причин проверьте Истек Тайм-Аут Соединения. Время ожидания истекло при попытке использовать подтверждение рукопожатия перед входом
решена эта проблема путем блокировки / черного списка IP-адресов, которые пытались перебить учетные записи пользователей. Проверьте свои журналы доступа SQL для большого количества неудачных попыток входа в систему (обычно для учетной записи "sa").
для меня получается, что брандмауэр в windows server блокировал порт 1433, который является портом sql server по умолчанию. Поэтому добавление входящего правила для принятия этих соединений сделало трюк для меня.



Comments