Подключение к 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?

816   14  

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 в своем беспроводном сетевом соединении.

enter image description here

мой исполняемый файл, построенный с использованием .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.

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

enter image description here

в моем случае выше всех вариантов уже были.

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

У меня была эта проблема, когда я сделал миграцию 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

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