Соединение с сервером было успешно установлено, но во время квитирования перед входом произошла ошибка.

112

Я получаю следующую ошибку, когда пытаюсь подключить производственную базу данных из локальной среды.

Раньше мне удавалось подключить производственную базу данных, но внезапно появляется следующая ошибка, есть идеи?

Соединение с сервером было успешно установлено, но затем произошла ошибка во время квитирования перед входом в систему. (поставщик: поставщик TCP, ошибка: 0 - дескриптор недействителен.)

Я пытался запустить веб-сайт asp.net на локальном ПК, у которого есть строка подключения к производственной БД, а затем трассировка стека для ошибки, которую я получаю в локальной среде.

>    at MyWebsiteDAL.clsForumQuestion.SelectAll(Int32 CurrentPageIndex, Int32 PageSize) in D:\EDrive\My WebSites\MyWebsite\MyWebsite\MyWebsiteDAL\clsForumQuestion.cs:line 821
       at CodeConnect.Default.Page_Load(Object sender, EventArgs e) in D:\EDrive\My WebSites\MyWebsite\MyWebsite\MyWebsite\Default.aspx.cs:line 100
       at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       at System.Web.UI.Control.OnLoad(EventArgs e)
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Есть идеи, что здесь могло пойти не так?

Джордон Уиллис
источник
К какой СУБД вы подключаетесь?
Will A
1
Можете ли вы подключиться с локального ПК с помощью SSMS? Этот вопрос лучше задать на serverfault.com
Will A
Да, я могу подключиться. То, что я наблюдал, внезапно заработало.
Джордон Уиллис
2
Я считаю, что этот вопрос относится к StackOverflow (а не к ServerFault), потому что основной проблемой, вызвавшей ошибку, был Asp.net Cassini в Visual Studio. У меня сработала остановка всех существующих экземпляров Cassini (WebDev.WebServer.exe) и повторный запуск приложения.
MikeTeeVee
@ MikeTeeVee У меня такая же проблема с простым приложением WinForm. Никакого кассини.
Сильвен Родриг

Ответы:

154

Решение

1) Очистите свое решение VS.Net

2) Восстановить проект.

3) Сбросить IIS

4) Снова запустите проект.

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

Джордон Уиллис
источник
25
У меня была аналогичная проблема (тоже с localhost). Ключевым моментом, возможно, был пункт 3. Все, что мне, казалось, нужно было сделать, это убить экземпляр VS WebServer (Cassini) и перестроить и нажать F5. Это решило проблему для меня. Спасибо за Ваш ответ. (Вам следует подумать о том, чтобы пометить это как решение)
Амадьер
1
Это решение также сработало для меня. Я тоже использовал VS Web Server (Cassini), а не IIS, точно так же, как Amadiere.
Саймон Ломакс
7
Это больше похоже на обходной путь, чем на исправление. Интересно, связана ли настоящая проблема с пулом соединений.
jrummell
2
Было это снова сегодня. Все, что вам нужно сделать, это запустить iisreset из командной строки администратора.
Ян Кемп
6
Этот ответ можно улучшить, предоставив некоторые возможные направления анализа первопричин. Обходные пути имеют значение, но более полезно знать, почему это происходит и почему обходные пути работают.
laindir 08
15

- Сохраните свою работу,
- Закройте Visual Studio, затем
- повторно откройте свой проект.

У меня всегда работает.

Думисани
источник
29
У меня это тоже сработало, но я часто обнаруживаю, что приготовление кофе во время перезапуска имеет решающее значение.
ED-209
У меня была аналогичная проблема, но вместо этого с сервером узла. Я запускал сервер узла на гостевой виртуальной машине ubuntu и получал доступ с узла виртуальной машины Windows 10. Приостановка и сохранение виртуальной машины, затем сброс хоста Windows 10, а затем открытие резервной копии виртуальной машины работали, поэтому я предположил, что это проблема Windows, а не локального сервера. Но тогда я только что попытался сбросить локальный сервер узла, и это тоже исправило его ... так что кто знает, ха
RyanQuey
10

У меня сработала следующая команда:

netsh Winsock reset

Видно на https://serverfault.com/a/487139/250527

Рикардо Стювен
источник
2
Это решило мою проблему. Я должен обедать сетевику, потому что бросил его под автобус.
greg
К вашему сведению, для этого resetтребуется перезагрузка системы.
wqw
9

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

Следует отметить, что в то время как некоторые потоки вызвали это исключение, другие выбросили:

System.Data.SqlClient.SqlException (0x80131904): истекло время ожидания подключения. Время ожидания истекло при попытке использовать подтверждение квитирования перед входом в систему. Это может быть связано с тем, что квитирование перед входом в систему не удалось или сервер не смог ответить вовремя. Время, затраченное на попытку подключения к этому серверу, было - инициализация [Pre-Login] = 43606; рукопожатие = 560; ---> System.ComponentModel.Win32Exception (0x80004005): время ожидания операции истекло

Обе проблемы исчезли после того, как система была изменена, чтобы она могла работать с меньшим объемом оперативной памяти.

Старнуто ди топо
источник
1
Подтверждено. Я выполнял интенсивную обработку на SQL Server с C # с помощью parallel.foreach на своем ноутбуке. Мое использование памяти было максимальным. Компьютер почти не работал около 15 минут, прежде чем я получил эту ошибку.
TheLegendaryCopyCoder
8

У меня была та же проблема, я хранил данные сеанса в базе данных, в строке подключения было Encrypt = True , которое, как я полагаю, сообщило клиенту sql подключиться к серверу в безопасном (SSL) режиме, удаление этого помогло!

Терри Кернан
источник
1
Этот флаг будет добавлен в строку подключения, если вы собираетесь использовать базу данных Windows Azure SQL. Я почти уверен, что он также будет использоваться для других поставщиков PaaS / IaaS / Server.
Parth Shah
AzureSQL требует истинного шифрования blogs.msdn.microsoft.com/buckwoody/2012/03/06/…
Jeson Martajaya,
5

Вы можете проверить несколько вещей:

  1. Ваш производственный сервер разрешает удаленные подключения. (возможно, кто-то отключил это, особенно если у вас есть администратор баз данных)

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

Ричард Фантоцци
источник
5

В моем случае эта ошибка возникла с точечным сетевым ядром и Microsoft.Data.SqlClient. Решением было добавить ;TrustServerCertificate=trueв конец строки подключения.

выпечка
источник
Спасибо, ты спас меня :)
DiPix
Это было при использовании самоподписанных сертификатов
Джефф Гюнтер,
4

В моем случае это было:

Persist Security Info=True;

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

Деллиотт
источник
3

Как описано в ответе Рикардо ,

netsh Winsock reset

работал на меня,

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

Надеюсь на это

Вишал Шарма
источник
3

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

В конце концов, у меня сработало следующее:

Использовал средство диспетчера конфигурации SQL Server для включения протоколов TCP / IP и / или именованных каналов на клиентском компьютере SQL Server.

  1. Нажмите кнопку «Пуск», выберите «Все программы» и нажмите «Диспетчер конфигурации SQL Server».
  2. Щелкните, чтобы развернуть сетевую конфигурацию SQL Server, а затем щелкните Клиентские протоколы.
  3. Щелкните правой кнопкой мыши протокол TCP / IP и выберите Включить.
  4. Щелкните правой кнопкой мыши протокол именованных каналов и выберите команду Включить.
  5. Если будет предложено, перезапустите службу SQL-сервера.

Я до сих пор не знаю, почему и когда это было отключено.

Daffyjeje
источник
2

Для меня решение - убить зомби-рабочие процессы IIS Express.

например, найти в диспетчере задач и завершить задачу.

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

Даниэль де Цваан
источник
1

У меня была такая же проблема, и мне не повезло с предлагаемыми исправлениями. Затем я наткнулся на эту статью и увидел комментарий Мирра о программе под названием Сендори, блокирующей LSP. Не знаю, как он попал на мой компьютер, но он был там, и его удаление устранило проблему.

Если статья не работает, просто проверьте свои программы и удалите Sendori, если вы ее видите.

рикрой
источник
1

Я перезапустил службу SQL Server (Sharepoint), и проблема была решена.

user2087459
источник
1

У меня возникла точно такая же проблема без изменений базы кода или серверов. Оказалось, что сервер БД работал на 100% ЦП, а SQL Server не хватало процессорного времени, что вызвало тайм-аут.

Люк Маккарти
источник
1

Была такая же проблема много дней. Мне пришлось явно добавить поддержку TLS1.2 в мой основной проект, чтобы устранить эту ошибку, и все работало нормально. (ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;)

См. Ссылку ниже для более подробной информации (спасибо автору Усману Хуршиду) https://www.itechtics.com/connection-successfully-established-error-occured-pre-login-handshake/

Фантом
источник
1

Пробовал большую часть вышеперечисленного, но ничего не помогло Затем отключил программное обеспечение VPN (NordVPN), и все стало нормально.

Пол Эванс
источник
1

Я пробовал много решений за последний месяц, ни одно не помогло. Проблема в том, что производственная база данных находится внутри VPN, и почему-то поставщик услуг Интернета считает, что HTTP-соединение небезопасно. Однако мне удалось подключиться к той же производственной БД из SSMS (использует TCP).

Мое решение: использовать мобильный телефон в качестве точки доступа и использовать мобильные данные вместо моего офиса / домашнего Wi-Fi.

mihai_omega
источник
1
То же и в моем случае. Спасибо!
Дэвид Ло,
0

Была та же проблема, причиной этого была библиотека BCrypt.Net, скомпилированная с использованием платформы .NET 2.0, в то время как весь проект, который ее использовал, компилировался с .NET 4.0. Если симптомы те же, попробуйте загрузить исходный код BCrypt и перестроить его в конфигурации выпуска в .NET 4.0. После того, как я это сделал, «рукопожатие перед входом» сработало нормально. Надеюсь, это кому-нибудь поможет.

Эдель
источник
0

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

Я поймал виновника: если вы используете *.iniфайл для своей системы, вы можете проверить, какое имя сервера было введено туда, и убедиться, что оно такое же, как и в строке подключения web.config.

user3619399
источник
0

Здесь та же проблема, и ни один из перечисленных здесь ответов не работал, и я не мог найти никаких решений в Интернете. Проблема возникла вскоре после применения юбилейного обновления Windows 10 на моем компьютере разработчика и затронула только мой старый экземпляр SQL Server 2005. Мне не удалось подключиться к экземпляру через свои веб-приложения или даже с помощью Sql Management Studio.

Как бы то ни было, вот что решило это для меня:

  1. Откройте диспетчер конфигурации SQL Server (в зависимости от того, какую версию SQL Server вы используете):

    • C: \ Windows \ SysWOW64 \ SQLServerManager.msc
    • C: \ Windows \ SysWOW64 \ SQLServerManager10.msc ИЛИ
    • C: \ Windows \ SysWOW64 \ SQLServerManager12.msc ИЛИ
    • и т.д
  2. Выберите службы SQL Server

  3. Найдите проблемную службу и просмотрите свойства

    • например, SQL Server (SQL2005) в моем случае
  4. На вкладке «Вход в систему» ​​измените «Встроенная учетная запись» на «Сетевая служба».

Это почти то, что говорило это случайное решение: http://www.kutayzorlu.com/operating-systems/linux-unix-redhat-debian-ubuntu-opensuse-centos/general-server-administrating/error-fixed-a-connection -was-success-installed-with-the-server-but-then-an-error-separated-during-the-pre-login-handshake-12405.html

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

Аркиликнам
источник
0

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

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

Ифесиначи Брайан
источник
0

Если вы подключаетесь к старому SQL Server:

Переключитесь с System.Data. SqlClient.SqlConnection к System.Data. OleDb.OleDbConnection

Используйте строку подключения OleDb:

<connectionStrings>
<add name="Northwind" connectionString="Provider=SQLOLEDB.1; Data Source=MyServer; Initial Catalog=Northwind;  Persist Security Info=True; User ID=abc; Password=xyz;" providerName="System.Data.OleDb" />
</connectionStrings>
Доминик Исайя
источник