Połączenie z serwerem zostało pomyślnie nawiązane, ale podczas uzgadniania przed logowaniem wystąpił błąd

111

Otrzymuję następujący błąd, gdy próbuję połączyć produkcyjną bazę danych ze środowiska lokalnego.

Udało mi się wcześniej podłączyć Production DB, ale nagle pojawia się błąd, masz jakiś pomysł?

Połączenie z serwerem zostało pomyślnie nawiązane, ale podczas uzgadniania przed logowaniem wystąpił błąd. (Dostawca: Dostawca TCP, błąd: 0 - uchwyt jest nieprawidłowy).

Próbowałem uruchomić witrynę internetową asp.net na lokalnym komputerze PC, który ma ciąg połączenia produkcyjnej bazy danych, a poniżej znajduje się ślad stosu dotyczący błędu, który otrzymuję w środowisku lokalnym.

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

Masz pojęcie, co mogło się tu nie udać?

Jordon Willis
źródło
Z którym DBMS się łączysz?
Will A
1
Czy możesz połączyć się z lokalnym komputerem za pomocą programu SSMS? To pytanie byłoby lepiej zadane na serverfault.com
Will A
Tak, mogę się połączyć. To, co obserwowałem, nagle zaczęło działać.
Jordon Willis,
2
Uważam, że to pytanie należy do StackOverflow (a nie ServerFault), ponieważ podstawowym problemem powodującym błąd był Asp.net Cassini w programie Visual Studio. Zatrzymanie wszystkich istniejących instancji Cassini (WebDev.WebServer.exe) i ponowne uruchomienie aplikacji zadziałało.
MikeTeeVee
@ MikeTeeVee Mam ten sam problem z prostą aplikacją WinForm. Bez cassini.
Sylvain Rodrigue

Odpowiedzi:

154

Rozwiązanie

1) Wyczyść rozwiązanie VS.Net

2) Przebuduj projekt.

3) Zresetuj usługi IIS

4) Uruchom projekt ponownie.

Zasadniczo to rozwiązało mój problem, ale w moim przypadku nie otrzymałem tego błędu i nagle moje lokalne środowisko zaczyna wyświetlać powyższy błąd, więc może ta sztuczka zadziała dla mnie.

Jordon Willis
źródło
25
Miałem podobny problem (również localhost). Wydaje się, że kluczowym punktem był punkt 3. Wszystko, co musiałem zrobić, to zabić instancję VS WebServer (Cassini), odbudować i nacisnąć F5. To mi rozwiązało problem. Dziękuję za odpowiedź. (Powinieneś rozważyć oznaczenie go jako rozwiązania)
Amadiere
1
To rozwiązanie również działało u mnie. Ja także używałem VS Web Server (Cassini) w przeciwieństwie do IIS, tak samo jak Amadiere.
Simon Lomax,
7
Brzmi to bardziej jak obejście niż naprawa. Zastanawiam się, czy prawdziwy problem dotyczy buforowania połączeń.
jrummell
2
Miałem to znowu dzisiaj. Wszystko, co musisz zrobić, to uruchomić iisreset z wiersza poleceń administratora.
Ian Kemp
6
Tę odpowiedź można poprawić, podając kilka możliwych wskazówek dotyczących analizy przyczyn źródłowych. Obejścia mają wartość, ale warto wiedzieć, dlaczego tak się dzieje i dlaczego działa.
laindir
15

- Zapisz swoją pracę,
- Zamknij program Visual Studio, a następnie
- Otwórz ponownie projekt

Zawsze mi pasuje.

Dumisani
źródło
29
Dla mnie to też zadziałało, ale często zdarza mi się, że robienie kawy podczas ponownego uruchamiania robi różnicę.
ED-209
Miałem podobny problem, ale zamiast tego z serwerem węzłów. Uruchomiłem serwer węzłowy na gościu maszyny wirtualnej Ubuntu i uzyskiwałem dostęp z hosta maszyny wirtualnej Windows 10. Wstrzymywanie i zapisywanie maszyny wirtualnej, a następnie resetowanie hosta systemu Windows 10, a następnie otwieranie kopii zapasowej maszyny wirtualnej działało, więc założyłem, że problem dotyczy systemu Windows, a nie lokalnego serwera. Ale potem właśnie spróbowałem zresetować lokalny serwer węzła i to również go naprawiło ... więc kto wie, ha
RyanQuey
10

Uruchomienie następującego polecenia zadziałało dla mnie:

netsh Winsock reset

Widziane pod adresem https://serverfault.com/a/487139/250527

Ricardo Stuven
źródło
2
To rozwiązało mój problem. Jestem winien facetowi z sieci lunch, bo wrzuciłem go pod autobus.
greg
FYI, to resetwymaga ponownego uruchomienia systemu.
wqw
9

Wystąpił ten błąd podczas uruchamiania niektórych procesów, które są bardzo kosztowne w pamięci. Kiedy w systemie zaczyna brakować pamięci, zacząłem dostrzegać tego rodzaju błąd. Musiałem zmienić algorytm, aby lepiej wykorzystać pamięć RAM.

Należy zauważyć, że podczas gdy niektóre wątki zgłosiły ten wyjątek, inne wyrzuciły:

System.Data.SqlClient.SqlException (0x80131904): Upłynął limit czasu połączenia. Limit czasu upłynął podczas próby wykorzystania potwierdzenia uzgadniania przed logowaniem. Może to być spowodowane niepowodzeniem uzgadniania przed logowaniem lub brakiem możliwości odpowiedzi serwera na czas. Czas spędzony podczas próby połączenia się z tym serwerem wyniósł - inicjalizacja [przed logowaniem] = 43606; handshake = 560; ---> System.ComponentModel.Win32Exception (0x80004005): Przekroczono limit czasu operacji oczekiwania

Oba problemy zniknęły po zmianie systemu, aby mógł działać przy mniejszej ilości pamięci RAM.

Starnuto di topo
źródło
1
Potwierdzony. Uruchomiłem intensywne przetwarzanie na SQL Server z C # przy użyciu parallel.foreach na moim laptopie. Moje zużycie pamięci było maksymalne. Komputer był ledwo nadający się do użytku przez około 15 minut, zanim pojawił się ten błąd.
TheLegendaryCopyCoder
8

Miałem ten sam problem, przechowywałem dane sesji w bazie danych, ciąg połączenia zawierał Encrypt = True , który zakładam, że powiedział klientowi sql, aby połączyć się z serwerem w trybie bezpiecznym (SSL), usunięcie tego pomogło!

Terry Kernan
źródło
1
Ta flaga zostanie dodana do parametrów połączenia, jeśli zamierzasz używać bazy danych SQL Azure systemu Windows. Jestem prawie pewien, że będzie on używany również przez innych dostawców PaaS / IaaS / Server.
Parth Shah
AzureSQL wymaga szyfrowania true blogs.msdn.microsoft.com/buckwoody/2012/03/06/ ...
Jeson Martajaya
5

Możesz chcieć sprawdzić kilka rzeczy:

  1. Twój serwer produkcyjny umożliwia połączenia zdalne. (możliwe, że ktoś to wyłączył, zwłaszcza jeśli masz DBA)

  2. Sprawdź parametry połączenia. Czasami, jeśli używasz adresu IP lub nazwy serwera, spowoduje to ten błąd. Spróbuj obu.

Richard Fantozzi
źródło
4

W moim przypadku było to:

Persist Security Info=True;

w moich parametrach połączenia, które musiały zostać usunięte. Kiedy to zrobiłem, nie miałem już problemów.

delliottg
źródło
4

W moim przypadku ten błąd wystąpił z rdzeniem dot net i Microsoft.Data.SqlClient. Rozdzielczość polegała na dodaniu ;TrustServerCertificate=truena końcu parametrów połączenia.

gratinierer
źródło
Dzięki, uratowałeś mnie :)
DiPix
Tak było w przypadku korzystania z certyfikatów z podpisem własnym
Geoff Gunter
3

Jak opisano w odpowiedzi Ricardo ,

netsh Winsock reset

pracował dla mnie,

PS jeśli masz menedżera pobierania internetowego lub takie programy, które zmieniają ustawienia IP są zainstalowane, to po uruchomieniu tego polecenia przy ponownym uruchomieniu komputera IDM poprosi o zmianę ustawień, w tym przypadku ustaw NIE, a następnie uruchom aplikację, która będzie działać poprawnie.

Mam nadzieję

Vishal Sharma
źródło
3

Miałem podobny problem, w którym nie mogłem połączyć się z bazą danych i wypróbowałem tutaj zalecenia.

Pod koniec dnia to zadziałało dla mnie:

Użyto narzędzia SQL Server Configuration Manager, aby włączyć protokoły TCP / IP i / lub Named Pipes na komputerze klienckim SQL Server.

  1. Kliknij Start, wskaż Wszystkie programy i kliknij SQL Server Configuration Manager.
  2. Kliknij, aby rozwinąć SQL Server Network Configuration, a następnie kliknij Client Protocols.
  3. Kliknij prawym przyciskiem myszy protokół TCP / IP, a następnie kliknij opcję Włącz.
  4. Kliknij prawym przyciskiem myszy protokół Named Pipes, a następnie kliknij opcję Włącz.
  5. Uruchom ponownie usługę serwera SQL, jeśli pojawi się odpowiedni monit.

Nadal nie wiem, dlaczego i kiedy zostało to wyłączone.

daffyjeje
źródło
2

Dla mnie rozwiązaniem jest zabicie ekspresowych procesów roboczych zombie IIS.

np. zlokalizuj w Menedżerze zadań i zakończ zadanie.

wprowadź opis obrazu tutaj

Daniel de Zwaan
źródło
1

Miałem ten sam problem i nie miałem szczęścia z sugerowanymi poprawkami. Następnie natknąłem się na ten artykuł i zobaczyłem komentarz Mirrh dotyczący programu o nazwie Sendori blokującego LSP. Nie mam pojęcia, jak to się stało na moim komputerze, ale było i usunięcie go rozwiązało problem.

Jeśli artykuł nie działa, po prostu sprawdź programy i odinstaluj Sendori, jeśli go zobaczysz.

rickeroye
źródło
1

Zrestartowałem usługę SQL Server (Sharepoint) i rozwiązałem problem.

user2087459
źródło
1

Otrzymałem dokładnie ten sam problem, bez zmian w bazie kodu lub serwerach. Okazało się, że serwer DB działał na 100% CPU, a SQL Server był pozbawiony jakiegokolwiek czasu procesora, co spowodowało przekroczenie limitu czasu.

TheLukeMcCarthy
źródło
1

Wypróbowałem większość z powyższych i nic nie działało. Następnie wyłącz oprogramowanie VPN (NordVPN) i wszystko było w porządku.

Paul Evans
źródło
1

Próbowałem wielu rozwiązań w ciągu ostatniego miesiąca, żadne nie zadziałało. Problem polega na tym, że produkcyjna baza danych znajduje się w sieci VPN i w jakiś sposób dostawca usług internetowych uważa, że ​​połączenie HTTP nie jest bezpieczne. Jednak udało mi się połączyć z tą samą produkcyjną bazą danych z SSMS (używa TCP).

Moje rozwiązanie: użyj telefonu komórkowego jako hotspotu i korzystaj z danych mobilnych zamiast sieci Wi-Fi w biurze / domu.

mihai_omega
źródło
1
To samo w moim przypadku. Dzięki!
David Lo
0

Miał ten sam problem, powodem była biblioteka BCrypt.Net, skompilowana z wykorzystaniem frameworka .NET 2.0, podczas gdy cały projekt, który ją wykorzystywał, kompilował się z .NET 4.0. Jeśli objawy są takie same, spróbuj pobrać kod źródłowy BCrypt i odbudować go w konfiguracji wydania w .NET 4.0. Po tym, jak to zrobiłem, „uścisk dłoni przed logowaniem” działał dobrze. Mam nadzieję, że to pomoże każdemu.

Eadel
źródło
0

Doświadczyłem tego błędu i wykonałem wszystkie sugestie od was, ale żadna nie miała żadnego wpływu na mój błąd.

Złapałem winowajcę: jeśli używasz *.inipliku dla swojego systemu, możesz chcieć sprawdzić, jaka nazwa serwera została tam wprowadzona i upewnić się, że jest taka sama jak ta w ciągu połączenia web.config.

user3619399
źródło
0

Ten sam problem tutaj i żadne odpowiedzi tutaj nie działały, ani żadnych rozwiązań, które mogłem znaleźć w Internecie. Problem zaczął się wkrótce po tym, jak aktualizacja Windows 10 rocznicowa została zastosowana na moim komputerze deweloperskim i dotyczyła tylko mojej starej instancji SQL Server 2005. Nie mogłem połączyć się z instancją za pośrednictwem moich aplikacji internetowych ani nawet przy użyciu Sql Management Studio.

To, co jest warte, rozwiązało to dla mnie:

  1. Otwórz Menedżera konfiguracji programu SQL Server (w zależności od używanej wersji programu SQL Server):

    • C: \ Windows \ SysWOW64 \ SQLServerManager.msc
    • C: \ Windows \ SysWOW64 \ SQLServerManager10.msc LUB
    • C: \ Windows \ SysWOW64 \ SQLServerManager12.msc LUB
    • itp
  2. Wybierz usługi SQL Server

  3. Zlokalizuj problematyczną usługę i wyświetl Właściwości

    • np. SQL Server (SQL2005) w moim przypadku
  4. Na karcie Logowanie zmień „Wbudowane konto” na „Usługa sieciowa”

Dokładnie tak mówi to losowe rozwiązanie: http://www.kutayzorlu.com/operating-systems/linux-unix-redhat-debian-ubuntu-opensuse-centos/general-server-administrating/error-fixed-a-connection -został-pomyślnie-ustanowiony-z-serwerem-ale-wtedy-wystąpił-błąd-podczas-uzgadniania-przed-logowaniem-12405.html

Wybrałem usługę sieciową bez powodu. Mój był już skonfigurowany do korzystania z systemu lokalnego. To zabezpieczenie nie ma dla mnie znaczenia, ponieważ było problematyczne tylko na moim lokalnym komputerze programistycznym, do którego dostęp był możliwy tylko lokalnie. Nie mogę doradzić, dlaczego to działa, ale zadziałało.

Arkiliknam
źródło
0

W moim przypadku otrzymywałem błąd, gdy chciałem uzyskać dostęp do zdalnej bazy danych. Jednak rozwiązałem to, uruchamiając usługę SQL Server Browser.

wprowadź opis obrazu tutaj

Ifesinachi Bryan
źródło
0

Jeśli łączysz się ze starym serwerem SQL:

Przełącz się z System.Data. SqlClient.SqlConnection to System.Data. OleDb.OleDbConnection

Użyj parametrów połączenia 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>
Dominic Isaia
źródło