З’єднання було успішно встановлено із сервером, але потім сталася помилка під час рукостискання попереднього входу


111

Я отримую наступну помилку, коли я намагаюся підключити виробничу БД з локального середовища.

Мені раніше вдалося підключити виробничу БД, але раптом у мене з’являється наступна помилка, будь-яка ідея?

З’єднання було успішно встановлено із сервером, але потім сталася помилка під час рукостискання попереднього входу. (постачальник: постачальник послуг TCP, помилка: 0 - ручка недійсна.)

Я намагався запустити веб-сайт asp.net на локальному ПК, на якому є рядок підключення Production DB, наступним є стек стеження за помилками, які я отримую в локальному середовищі.

>    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)

Будь-яка ідея, що тут може піти не так?


До якої СУБД ви підключаєтесь?
Чи буде

1
Чи можете ви підключитися з локального ПК за допомогою SSMS? Це питання краще задати на serverfault.com
Чи буде

Так, я можу підключитися. Те, що я спостерігаю, раптом почало працювати.
Джордон Вілліс

2
Я вважаю, що це питання належить до StackOverflow (а не ServerFault), оскільки основна проблема, що викликала помилку, була Asp.net Cassini в Visual Studio. Припинення всіх існуючих екземплярів Cassini (WebDev.WebServer.exe) та повторний запуск програми працювали на мене.
MikeTeeVee

@ MikeTeeVee У мене виникла та сама проблема з простим додатком WinForm. Ніякі кассіні не беруть участь.
Сільвен Родріг,

Відповіді:


154

Рішення

1) Очистіть рішення VS.Net

2) Проект відновлення.

3) Скидання IIS

4) Запустіть проект ще раз.

В основному це вирішило мою проблему, але в моєму випадку я не отримував цієї помилки, і раптом моє місцеве оточення починає давати мені вище помилки, тому, можливо, цей трюк працює для мене.


25
У мене була схожа проблема (теж місцевий господар). Ключовим моментом, мабуть, була точка 3. Все, що мені здавалося, що потрібно зробити, - це вбити екземпляр VS WebServer (Cassini) та відновити та вдарити F5. Це вирішило це для мене. Дякую за вашу відповідь. (Ви повинні розглянути можливість позначення його як рішення)
Amadiere

1
Це рішення також працювало для мене. Я теж використовував веб-сервер VS (Cassini) на відміну від IIS так само, як Amadiere.
Саймон Ломакс

7
Це звучить більше як вирішення проблеми, ніж виправлення. Цікаво, чи справжня проблема пов'язана з об'єднанням з'єднань.
jrummell

2
Сьогодні це було знову. Все, що вам потрібно зробити, це запустити iisreset з командного рядка адміністратора.
Ян Кемп

6
Цю відповідь можна було б покращити, надавши деякі можливі вказівки для аналізу першопричини. Робочі напрямки мають цінність, але корисніше знати, чому це відбувається і чому працює обхід.
laindir

15

- Збережіть свою роботу,
- Закрийте Visual Studio, потім
- Відкрийте свій проект

Завжди працює на мене.


29
Це теж працювало для мене, але я часто знаходжу приготування кави, коли вона перезавантажується, має значення.
ED-209

У мене була схожа проблема, але натомість із сервером вузлів. Я запускав сервер вузлів у гості ubuntu VM та отримував доступ з хоста Windows 10 VM. Призупинення та збереження VM, потім скидання хоста Windows 10, потім відкриття резервної копії VM спрацювало, тому я припустив, що це проблема з Windows, а не з локальним сервером. Але потім я просто спробував скинути локальний сервер вузлів, і це також виправлено ... так, хто знає, га
RyanQuey

10

Запуск наступної команди працював на мене:

netsh Winsock reset

Побачено на https://serverfault.com/a/487139/250527


2
Це вирішило мою проблему. Я зобов'язаний хлопцеві мережі обід тому, що я кинув його під автобус.
greg

FYI, для цього resetпотрібен перезапуск системи.
wqw

9

Я зіткнувся з цією помилкою під час запуску дуже дорогих процесів на пам'ять. Коли в системі почало бракувати пам'яті, я почав помічати подібні помилки. Мені довелося змінити алгоритм, щоб краще використовувати ОЗУ.

Зауважимо, що хоча деякі теми викидали цей виняток, деякі інші кидали:

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

Обидві проблеми зникли після зміни системи, щоб вона могла працювати з меншою кількістю оперативної пам’яті.


1
Підтверджено. Я запустив інтенсивну обробку на SQL Server із C #, використовуючи паралельно.форех на своєму ноутбуці. Моє використання пам'яті було на максимумі. Комп'ютер ледве використовувався близько 15 хвилин, перш ніж я отримав цю помилку.
TheLegendaryCopyCoder

8

У мене була така ж проблема: я зберігав дані сеансу в базі даних, рядок з'єднання мав в ньому Encrypt = True , який, я вважаю, сказав клієнту sql підключитися до сервера в безпечному (SSL) режимі, видалення цього допомогло!


1
Цей прапор буде доданий до рядка підключення, якщо ви будете використовувати базу даних SQL Windows Azure. Я впевнений, що він буде використовуватися і для інших постачальників послуг PaaS / IaaS / Server.
Parth Shah

AzureSQL вимагає шифрування справжніх blogs.msdn.microsoft.com/buckwoody/2012/03/06/…
Jeson Martajaya

5

Ви можете перевірити кілька речей:

  1. Ви виробничий сервер дозволяє віддалені з'єднання. (можливо, хтось відключив це, особливо якщо у вас є DBA)

  2. Перевірте свій рядок з'єднання. Іноді, якщо ви використовуєте ip-адресу або ім’я сервера, це спричинить цю помилку. Спробуйте обидва.


4

У моєму випадку це було:

Persist Security Info=True;

у моєму рядку з'єднання, який потрібно було видалити. Як тільки я це зробив, у мене більше не було проблем.


4

У моєму випадку ця помилка сталася з точковим чистим ядром та Microsoft.Data.SqlClient. Постанова повинна була додати ;TrustServerCertificate=trueдо кінця рядка з'єднання.


Дякую, ти врятував мене :)
DiPix

Це було воно під час використання самопідписаних сертифікатів
Джефф Гюнтер

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. Клацніть правою кнопкою миші протокол Named Pipes, а потім натисніть Увімкнути.
  5. Перезапустіть службу сервера SQL, якщо буде запропоновано зробити це.

Я досі не впевнений, чому або коли це було відключено.


2

Для мене рішення полягає в тому, щоб знищити процеси зомбі IIS express.

наприклад, знайдіть у диспетчері завдань і закінчіть завдання.

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


1

У мене була ця сама проблема і мені не пощастило із запропонованими виправленнями. Потім я натрапив на цю статтю і побачив коментар Mirrh щодо програми під назвою Сендорі, що блокує LSP. Поняття не маю, як воно потрапило на мій комп'ютер, але там воно було, і усунення його вирішило проблему.

Якщо стаття не працює, просто перевірте свої програми та видаліть Sendori, якщо ви її бачите.


1

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


1

У мене виникла та сама проблема, без зміни кодової бази чи серверів. Виявилося, що сервер БД працює на 100% процесора, а SQL Server голодує будь-який час процесора, що спричинило час очікування.


1

З тією ж проблемою були багато днів. Я повинен був явно додати підтримку TLS1.2 у своєму базовому проекті, щоб вирішити цю помилку, і вона спрацювала чудово. (ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;)

Детальніше дивіться нижче за посиланням (спасибі автору Усману Хуршиду) https://www.itechtics.com/connection-successfully-established-error-ocured-pre-login-handshake/


1

Перепробував більшу частину сказаного і нічого не вийшло. Потім вимкнули програмне забезпечення VPN (NordVPN) і все було добре.


1

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

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


1
Те саме в моєму випадку. Дякую!
Девід Ло

0

У цьому ж питанні причиною його була бібліотека BCrypt.Net, складена за допомогою .NET 2.0 фреймворку, тоді як весь проект, який використовував її, збирався з .NET 4.0. Якщо симптоми однакові, спробуйте завантажити вихідний код BCrypt та відновити його у конфігурації випуску в .NET 4.0. Після того, як я це зробив, «рукостискання перед входом» спрацювало чудово. Сподіваюся, це допоможе комусь.


0

Я зіткнувся з цією помилкою і зробив усі пропозиції від вас, хлопці, але жодна не вплинула на мою помилку.

Я зрозумів вину: якщо ви використовуєте *.iniфайл для вашої системи, ви, можливо, захочете перевірити, яке ім'я сервера введено туди, і переконайтеся, що воно таке, як у вашому рядку підключення web.config.


0

Тут працює одна і та сама відповідь, і жодних наведених тут відповідей не було, і жодних рішень я не міг знайти в Інтернеті. Випуск розпочався незабаром після оновлення ювілею Windows 10, застосованого на моєму ПК Dev, і торкнувся лише мого старого екземпляра 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 -був успішно встановлений-з-сервер, але-то-помилка-сталася-під час-перед-вхід-рукостискання-12405.html

Мережевий сервіс я вибрав взагалі без причини. Шахта вже була налаштована для використання локальної системи. Ця безпека для мене не має значення, оскільки це було проблематично лише на моїй локальній машині розвитку, доступ якої здійснювався лише локально. Я не можу порадити, чому це працює, але це було.


0

У моєму випадку я отримував помилку, коли хотів отримати доступ до віддаленої бази даних. Однак я вирішив це, запустивши службу браузера SQL Server.

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


0

Якщо ви підключаєтесь до старого SQL-сервера:

Перехід з System.Data. SqlClient.SqlConnection to 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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.