[Sql-server] Иногда работает подключение к SQL Server


Answers

У Ive была та же самая ошибка, которая возникла подозрительно с последним раундом обновлений 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), что привело к подозрению в обновлении Microsoft!

Question

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

Server = THESERVER \ TheInstance; Database = 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?




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

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

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

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




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

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

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




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

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




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

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




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