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

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

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

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

Истекло время ожидания подключения. Время ожидания истекло при попытке использовать подтверждение квитирования перед входом в систему.
Это могло произойти из-за того, что квитирование перед входом в систему не удалось или сервер не смог ответить вовремя.
Время, затраченное на попытку подключения к этот сервер был - инициализация [Pre-Login] = 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();
}

Таблица небольшая, всего 78 строк.

Однако на том же компьютере, на котором приложение .NET получает эту ошибку, я могу подключиться к ЭТОМУ СЕРВЕРУ с помощью SSMS и идентификатора пользователя / пароля, указанного в строке подключения.

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


person Eric J.    schedule 18.03.2013    source источник
comment
возможно, вы столкнулись с проблемой, упомянутой в blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/   -  person pardeepk    schedule 29.11.2017


Ответы (22)


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

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

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

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

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

  • Запустите диспетчер конфигурации сервера Sql
  • Откройте узел "Сетевая конфигурация SQL Server".
  • Щелкните левой кнопкой мыши Протоколы для MYSQLINSTANCE.
  • На правой панели щелкните правой кнопкой мыши TCP / IP.
  • Щелкните Свойства
  • Выберите вкладку IP-адреса.
  • Для каждого IP-адреса в списке убедитесь, что для Active и Enabled установлено значение Да.
person Eric J.    schedule 18.03.2013
comment
Спасибо, это устранило ошибку для меня. Интересно, что все IP-адреса были отключены (раньше их не было). Было бы хорошо знать, что может привести к их отключению, поскольку я не думаю, что в моем случае конфигурация будет изменена вручную ... - person Matt; 05.08.2014
comment
Я никогда не отключал вручную свои IPv6-адреса. Мне тоже интересно, как они оказались инвалидами. - person Eric J.; 05.08.2014
comment
По какой-то причине я не могу включить IPv6. В нем говорится, что необходимо перезапустить службу, чтобы изменения вступили в силу, но он никогда не сохраняет значение «Да». Любые подсказки о том, как это сделать. - person Salman; 02.02.2015
comment
@ S.A: У меня такого не было. Включен ли IPv6 в настройках сети? - person Eric J.; 02.02.2015
comment
@EricJ. Да, он включен. Однако проблема заключалась не в IPv6. Это было с динамическим портом, упомянутым в конфигурации сети экземпляра (какое-то 5-значное случайное число). После его удаления я также смог подключиться удаленно. Спасибо за вашу помощь! - person Salman; 03.02.2015
comment
Я не уверен, что отключение отдельных записей является проблемой, поскольку на вкладке «Протокол» есть переопределение «прослушивать все», которое сообщает SQL прослушивать все IP-адреса. См. Следующую ссылку для документации. msdn.microsoft.com/en-us/library/dd981060.aspx - person ShaneH; 25.06.2015
comment
Исправлена ​​проблема для меня, я изучаю базы данных, и эта ошибка возникла из ниоткуда в SMSS. Спасибо ! - person jiciftw; 20.05.2021

У меня возникла та же ошибка, которая подозрительно совпадала с последним раундом обновлений Microsoft (02.09.2016). Я обнаружил, что SSMS подключается без проблем, в то время как мое приложение ASP.NET возвращало «истекший период тайм-аута при попытке использовать подтверждение квитирования перед входом в систему».

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

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

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

Две тестовые системы (отдельные клиенты и серверы Sql) были затронуты одновременно, что заставило меня подозревать обновление Microsoft!

person Shaun Keon    schedule 12.02.2016
comment
У меня была такая же проблема, спасибо за разрешение. Я подключался с использованием встроенной безопасности через VPN, и увеличение тайм-аута подключения по умолчанию с 15 до 30 секунд решило проблему для меня. - person Mark G; 17.09.2016
comment
У меня возникла эта проблема с SQL 2014 LocalDB после того, как setup.exe установил новое приложение, и процесс запуска пытался создать новую базу данных. Это исправление спасло меня от плевка на манекен - спасибо, Шон! - person Scott; 26.10.2016
comment
Это решило проблему и для меня. В моем случае я подключался через VPN и добавлял запись в файл hosts. Проблема возникала только при использовании имени хоста в приложениях SSMS и .NET. При использовании IP-адреса проблемы не возникло. - person Dan; 03.11.2016

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

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

А ТАКЖЕ

  • Для каждого указанного IP-адреса убедитесь, что TCP Dynamic Ports пуст и TCP Port = 1433 (или какой-либо другой порт).
  • Откройте брандмауэр Windows и убедитесь, что порт открыт во входящих подключениях.
person Renzo Ciot    schedule 15.04.2015

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

person maozx    schedule 09.01.2016
comment
Значение параметра TransparentNetworkIPResolution = False. Это новая функция .NET 4.6.1, которая по умолчанию включена. Установка этого параметра в значение false удалит тайм-аут 500 мс, создаваемый этой функцией. Для получения дополнительной информации: blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/ - person Jorriss; 11.08.2016
comment
Спасибо. Часы исследования этой проблемы. Мне нужно добавить этот ответ в избранное. Комментарий @Jorriss очень помог понять, почему. Однако вы можете обновить свой ответ, указав правильное ключевое слово. У Йоррисса правильная ссылка. - person TravisWhidden; 25.09.2018

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

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

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

person Pomster    schedule 20.09.2013

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

person smwikipedia    schedule 14.01.2014
comment
Думаю, это не может быть правильным ответом, потому что вопрос содержит лишь иногда. Заблокированный порт не решит этот вопрос. - person Magier; 24.02.2016

Мой исполняемый файл, созданный с использованием .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 Обновление строки подключения согласно статье также решило проблему без необходимости отката версии платформы.

person user270576    schedule 16.08.2017

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

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

person Myk Agustin    schedule 19.02.2016

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

person chainstair    schedule 28.02.2019

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

Подробнее о MSDN

person Uriil    schedule 01.04.2019

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

Решил это увеличением времени ожидания подключения = 30.  Студия управления SQL Server

person Jignesh    schedule 26.04.2017

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

person user3424480    schedule 06.07.2017

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

person Robert Benyi    schedule 30.04.2019

К сожалению, у меня была проблема с локальным SQL Server, установленным в Visual Studio, и здесь многие решения для меня не сработали. Все, что мне нужно сделать, это сбросить мою Visual Studio, перейдя по ссылке:

Панель управления> Программа и компоненты> Средство запуска установки Visual Studio

и нажмите кнопку Еще и выберите Восстановить.

После этого я смог получить доступ к моему локальному серверу SQL и работать с локальными базами данных SQL.

person muhammad tayyab    schedule 25.10.2019

Добавление ответа здесь, несмотря на ранее принятый ответ. По моему сценарию подтвердился DNS. В частности, тайм-аут DNS во время рукопожатия перед входом в систему. Изменив DNS-имя на IP-адрес (или используя запись в файле Hosts), вы обойдете проблему. Хотя и ценой потери автоматического разрешения IP.

Например, даже если для тайм-аута строки подключения установлено значение 60 в течение полной минуты, это все равно произойдет в течение нескольких секунд после попытки. Это наводит на вопрос, почему тайм-аут до указанного периода тайм-аута? DNS.

person Barry    schedule 06.07.2020

Это еще одно решение ошибки в OP ... Есть много решений, так как есть много причин.

Я установил Developer Edition MSSql 2019. По умолчанию его установка заблокирована ... он будет работать нормально, если он будет на вашей машине разработки. Если вы установите его на другой компьютер, а не на устройство разработчика, вам нужно будет обновить правило брандмауэра.

По умолчанию ... профиль брандмауэра для MS SQL Server является частным

Возможно, вам потребуется включить общедоступные и / или доменные профили. Используйте домен только при аутентификации в домене.
Профили брандмауэра Windows
Профили брандмауэра

Также ... чтобы включить все IP-адреса (как в принятом ответе), все, что вам нужно сделать, это

Установите для параметра "Прослушать все" значение "Да" в свойствах TCP / IP.

Параметры свойств TCP / IP
Параметры свойств TCP / IP

person Chris Catignani    schedule 04.06.2021

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

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

person Chuck Herrington    schedule 04.05.2016

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

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

person John Livermore    schedule 29.11.2016

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

person Josué Zatarain    schedule 12.09.2018

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

person Ricardo Fontana    schedule 25.04.2019

У меня была точная проблема, я попробовал несколько вариантов, не сработало, наконец, перезапустил систему, все работало нормально.

person NandhaGopalElangovan    schedule 02.12.2019

Чтобы отследить ошибку Истекло время ожидания подключения, Пожалуйста, убедитесь, что:

Для получения дополнительных сведений проверьте Истекло время ожидания подключения. Время ожидания истекло при попытке использовать подтверждение квитирования перед входом в систему

person Mohamed    schedule 30.01.2017
comment
Какие из этих случаев связаны с периодическими ошибками? - person RonJohn; 06.04.2018
comment
Измените, чтобы раскрыть свою аффилированность, это обязательно. Спасибо. - person Maximillian Laumeister; 31.05.2020