Die Verbindung zu SQL Server funktioniert manchmal


99

Eine ADO.Net-Anwendung kann nur manchmal eine Verbindung zu einem anderen Server im lokalen Netzwerk herstellen. Es scheint zufällig zu sein, ob ein bestimmter Verbindungsversuch erfolgreich ist oder fehlschlägt. Die Verbindung verwendet eine Verbindungszeichenfolge in der Form:

Server = THESERVER \ TheInstance; Database = TheDatabase; User Id = TheUser; Passwort = ThePassword;

Der zurückgegebene Fehler lautet:

Verbindungszeitlimit abgelaufen. Die Zeitüberschreitung beim Versuch, die Handshake-Bestätigung vor der Anmeldung zu nutzen.
Dies kann daran liegen, dass der Handshake vor der Anmeldung fehlgeschlagen ist oder der Server nicht rechtzeitig antworten konnte.
Die Dauer des Versuchs, eine Verbindung zu diesem Server herzustellen, betrug: [Voranmeldung] Initialisierung = 42030; Handschlag = 0;

Die .NET-Anwendung ist eine kleine Test-App, die den folgenden Code ausführt:

using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
    conn.Open();
    int rowCount = (int)cmd.ExecuteScalar();
}

TheTable ist klein, nur 78 Zeilen.

Auf demselben Computer , auf dem die .NET-Anwendung diesen Fehler empfängt, kann ich jedoch mithilfe von SSMS und der in der Verbindungszeichenfolge angegebenen Benutzer-ID / des Kennworts eine Verbindung zu THESERVER herstellen.

Warum kann die Verbindung über eine ADO.Net-App fehlschlagen, aber mit identischen Anmeldeinformationen von SSMS erfolgreich sein?


1
Sie könnten auf ein Problem stoßen,
pardeepk

Antworten:


92

Es stellte sich heraus, dass TCP / IP für die IPv4-Adresse, jedoch nicht für die IPv6-Adresse von aktiviert war THESERVER.

Anscheinend haben einige Verbindungsversuche IPv4 und andere IPv6 verwendet.

Durch Aktivieren von TCP / IP für beide IP-Versionen wurde das Problem behoben.

Die Tatsache, dass SSMS funktionierte, stellte sich als zufällig heraus (die ersten Versuche verwendeten vermutlich IPv4). Einige spätere Versuche, eine Verbindung über SSMS herzustellen, führten zu derselben Fehlermeldung.

So aktivieren Sie TCP / IP für zusätzliche IP-Adressen:

  • Starten Sie SQL Server Configuration Manager
  • Öffnen Sie den Knoten SQL Server-Netzwerkkonfiguration
  • Klicken Sie mit der linken Maustaste auf Protokolle für MYSQLINSTANCE
  • Klicken Sie im rechten Bereich mit der rechten Maustaste auf TCP / IP
  • Klicken Sie auf Eigenschaften
  • Wählen Sie die Registerkarte IP-Adressen
  • Stellen Sie für jede aufgelistete IP-Adresse sicher, dass Aktiv und Aktiviert Ja sind.

Danke, das hat den Fehler für mich behoben. Interessanterweise wurden alle IP-Adressen deaktiviert (zuvor nicht). Es wäre gut zu wissen, was dazu führen kann, dass diese deaktiviert werden, da ich nicht glaube, dass die Konfiguration in meinem Fall manuell geändert wurde ...
Matt

Ich habe meine IPv6-Adressen auch nie manuell deaktiviert. Ich frage mich auch, wie sie behindert wurden.
Eric J.

Ich kann IPv6 aus irgendeinem Grund nicht aktivieren. Es heißt, dass der Dienst neu gestartet werden muss, damit Änderungen wirksam werden, aber niemals als "Ja" beibehalten wird. Irgendwelche Hinweise, wie man es macht
Salman

5
Ich bin nicht sicher, ob die einzelnen Einträge, die deaktiviert werden, ein Problem darstellen, da die Registerkarte "Protokoll" eine Überschreibung "Alle hören" enthält, die SQL anweist, alle IPs abzuhören. Dokumentation finden Sie unter folgendem Link. msdn.microsoft.com/en-us/library/dd981060.aspx
ShaneH

2
Ich
sehe so

30

Ich hatte gerade den gleichen Fehler, der verdächtig mit der neuesten Runde der Microsoft-Updates (02.09.2016) übereinstimmte. Ich habe festgestellt, dass SSMS ohne Probleme verbunden ist, während meine ASP.NET-Anwendung den Fehler "Zeitüberschreitung beim Versuch, die Handshake-Bestätigung vor der Anmeldung zu verarbeiten" zurückgegeben hat

Die Lösung für mich bestand darin, der Verbindungszeichenfolge ein Verbindungszeitlimit von 30 Sekunden hinzuzufügen, z.

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

In meiner Situation war die einzige betroffene Verbindung eine, die integrierte Sicherheit verwendete, und ich gab mich vor dem Herstellen einer Verbindung als Benutzer aus. Andere Verbindungen zu demselben Server mithilfe der SQL-Authentifizierung funktionierten einwandfrei!

2 Testsysteme (separate Clients und SQL Server) waren gleichzeitig betroffen, was mich zu dem Verdacht auf ein Microsoft-Update führte!


Ich hatte das gleiche Problem, danke für die Lösung. Ich habe eine Verbindung mit integrierter Sicherheit über ein VPN hergestellt und das Standard-Verbindungszeitlimit von 15 auf 30 Sekunden erhöht. Das Problem wurde für mich behoben.
Mark G

1
Ich hatte dieses Problem mit SQL 2014 LocalDB, nachdem setup.exe die neue Anwendung installiert hatte und der Startvorgang versuchte, die neue Datenbank zu erstellen. Dieses Update hat mich davor bewahrt, den Dummy auszuspucken - danke Shaun!
Scott

1
Dies löste das Problem auch für mich. In meinem Fall habe ich eine Verbindung über VPN hergestellt und einen Eintrag in die Hosts-Datei hinzugefügt. Das Problem trat nur bei Verwendung des Hostnamens in SSMS- und .NET-Anwendungen auf. Bei Verwendung der IP-Adresse ist das Problem nicht aufgetreten.
Dan

DANKE FÜR DIESE ANTWORT!
Konrad

17

Ich habe das Problem wie Eric gelöst, aber mit einigen anderen Änderungen:

  • Starten Sie SQL Server Configuration Manager
  • Öffnen Sie den Knoten SQL Server-Netzwerkkonfiguration
  • Klicken Sie mit der linken Maustaste auf Protokolle für MYSQLINSTANCE
  • Klicken Sie im rechten Bereich mit der rechten Maustaste auf TCP / IP
  • Klicken Sie auf Eigenschaften
  • Wählen Sie die Registerkarte IP-Adressen
  • Stellen Sie für jede aufgelistete IP-Adresse sicher, dass Aktiv und Aktiviert Ja sind.

UND

  • Stellen Sie für jede aufgelistete IP-Adresse sicher, dass die dynamischen TCP-Ports leer sind und der TCP-Port = 1433 (oder ein anderer Port).
  • Öffnen Sie die Windows-Firewall und überprüfen Sie, ob der Port in eingehenden Verbindungen geöffnet ist

Die Lösung funktioniert bei mir nicht. Ich habe einen Server, der die Website und die Datenbank enthält, und dieses Problem tritt nie auf, aber ich habe dieses Problem gefunden, wenn der Webserver vom Datenbankserver getrennt ist
Ibrahim Amer

11

Ich hatte das gleiche Problem beim Versuch, über Visual Studio eine Verbindung zu einem Server in einem lokalen Netzwerk (über VPN) herzustellen, während ich ein Entitätsdatenmodell einrichtete.
Kann nur durch Einstellen TransparentNetworkIPResolution=falseder Verbindungszeichenfolge gelöst werden . Im VS Add Connection Wizard finden Sie ihn auf der Registerkarte Erweitert.


3
Die Einstellung ist TransparentNetworkIPResolution = False. Es ist eine neue Funktion ab .NET 4.6.1 und standardmäßig aktiviert. Wenn Sie diesen Wert auf "false" setzen, wird das durch diese Funktion verursachte Zeitlimit von 500 ms entfernt. Für weitere Informationen: blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/…
Jorriss

Danke dir. Stundenlange Forschung zu diesem Problem. Ich muss diese Antwort favorisieren. Der Kommentar von @Jorriss war sehr hilfreich, um zu verstehen, warum. Sie können Ihre Antwort jedoch aktualisieren, um das richtige Schlüsselwort zu erhalten. Jorriss hat die richtige Referenz.
TravisWhidden

5

Ich hatte das gleiche Handshake-Problem bei der Verbindung zu einem gehosteten Server.

Ich habe mein Netzwerk- und Freigabecenter geöffnet und IPv6 für meine drahtlose Netzwerkverbindung aktiviert.

Geben Sie hier die Bildbeschreibung ein


3

Meine ausführbare Datei, die mit .NET Framework 3.5 erstellt wurde, meldete diese Verbindungsprobleme in etwa der Hälfte der Fälle, nachdem kürzlich (Woche vom 7. August 2017) einige Windows-Updates installiert wurden.

Verbindungsfehler wurden durch .NET Framework 4.7 verursacht, das auf dem Zielcomputer installiert wurde (die automatische Installation von Windows Updates war aktiviert) - https://support.microsoft.com/?kbid=3186539

Durch die Deinstallation von .NET Framework 4.7 wurden Verbindungsprobleme behoben.

Anscheinend gibt es eine grundlegende Änderung in .Net Framework 4.6.1 - TransparentNetworkIPResolution Durch das Aktualisieren der Verbindungszeichenfolge gemäß Artikel wurde das Problem ebenfalls behoben, ohne dass die Framework-Version zurückgesetzt werden musste.


2

Ich habe diesen Fehler unter Windows Server 2012 und SQL Server 2012 behoben, indem ich IPv6 aktiviert und den eingehenden Port 1433 entsperrt habe.


1
Ich denke, dies kann keine richtige Antwort sein, da die Frage "nur manchmal" enthält. Ein blockierter Port wird die diesbezügliche Frage nicht beantworten.
Magier

2

In unserem Fall trat ein Problem aufgrund der Verfügbarkeitsclusterkonfiguration auf. Um dieses Problem zu lösen, mussten wir MultiSubnetFailoverin der Verbindungszeichenfolge True setzen .

Weitere Details zu MSDN


1

Ich hatte das gleiche Problem, schaffen es durch lösen Öffnen / Aktivieren Sie den Port 1433 und TCP / IP in SQL Server Configuration Manager und dann Neu - Start der Server

Geben Sie hier die Bildbeschreibung ein


1

In meinem Fall waren vor allem Optionen schon da.

Es wurde durch Erhöhen des Verbindungszeitlimits = 30 behoben.SQL Server Management Studio


1

Bevor Sie wie ich mehr Zeit für die Lösung des Problems verlieren, versuchen Sie einfach, Ihren Windows-Computer neu zu starten . Arbeitete für mich, nachdem ich alle anderen Lösungen angewendet hatte.


0

Ich hatte dieses Problem, als ich eine Migration von SharePoint 2010 auf 2013 durchführte. Ich vermutete, dass der Datenbankserver, der sich auf der anderen Seite einer Firewall befindet, die IP6 nicht weiterleitet, versuchte, IP6 zu verwenden, und beim Herstellen einer Verbindung zur Datenbank fehlschlug.

Ich denke, das Problem ist jetzt gelöst. Die Fehler scheinen aufgehört zu haben. Ich habe einfach IP6 (durch Deaktivieren) für den Netzwerkadapter auf den SharePoint-Servern deaktiviert.


0

Ich hatte das gleiche Problem, stellte jedoch über eine statische IP-Adresse eine Verbindung zu einer Remote-Datenbank her. Keine der oben genannten Lösungen hat mein Problem gelöst.

Ich konnte die richtige Benutzerzuordnung für die von mir verwendete Sicherheitsanmeldung nicht hinzufügen. Daher bestand die Lösung für mich lediglich darin, sicherzustellen, dass die Benutzerzuordnungseinstellung für den Zugriff auf meine Datenbank festgelegt wurde.


0

Dieses Problem wurde behoben, indem IP-Adressen blockiert / auf die schwarze Liste gesetzt wurden, die versuchten, Benutzerkonten brutal zu erzwingen. Überprüfen Sie Ihre SQL-Zugriffsprotokolle auf eine große Anzahl fehlgeschlagener Anmeldeversuche (normalerweise für das Konto "sa").


0

Für mich stellt sich heraus, dass die Firewall in Windows Server den Port 1433 blockiert hat, der der Standard-SQL Server-Port ist. Das Hinzufügen einer eingehenden Regel zum Akzeptieren dieser Verbindungen war für mich der Trick.


0

In meinem Fall verursacht der Parameter Persist Security Info=truemit dem Benutzer und dem Kennwort in der Verbindungszeichenfolge das Problem. Entfernen des Parameters oder des Satzes zur falseLösung des Problems.


0

Versuchen Sie zunächst einen einfachen Neustart von SQL Server, bevor Sie drastische Maßnahmen ergreifen. Könnte es reparieren. Es hat für mich getan


0

Leider hatte ich ein Problem mit Local SQL Server, das in Visual Studio installiert war, und hier haben viele Lösungen für mich nicht funktioniert. Alles, was ich tun muss, ist, mein Visual Studio zurückzusetzen, indem ich zu:

Systemsteuerung> Programm & Funktionen> Visual Studio Setup Launcher

Klicken Sie auf die Schaltfläche Mehr und wählen Sie Reparieren

Danach konnte ich auf meinen lokalen SQL Server zugreifen und mit lokalen SQL-Datenbanken arbeiten.


0

Ich hatte das gleiche Problem, das nach dem letzten Microsoft Windows-Update automatisch behoben wurde. Hat jemand das gleiche Problem?


0

Ich hatte das genaue Problem, versuchte mehrere Soultion funktionierte nicht, startete zuletzt das System neu, es funktionierte gut.


0

Stellen Sie Folgendes sicher, um den Fehler "Verbindungszeitlimit abgelaufen" zu verfolgen :

Weitere Informationen finden Sie unter Abgelaufenes Verbindungszeitlimit. Die Zeitüberschreitung beim Versuch, die Handshake-Bestätigung vor der Anmeldung zu nutzen


Welcher dieser Fälle hat mit zeitweiligen Fehlern zu tun?
RonJohn

Bitte bearbeiten Sie, um die Zugehörigkeit offenzulegen, es ist erforderlich . Vielen Dank.
Maximillian Laumeister

0

Hier eine Antwort hinzufügen, trotz zuvor akzeptierter Antwort. Als mein Szenario wurde bestätigt, DNS zu sein. Insbesondere ein DNS-Timeout während des Pre-Login-Handshakes. Durch Ändern von einem DNS-Namen in eine IP-Adresse (oder Verwenden des Hosts-Dateieintrags) umgehen Sie das Problem. Allerdings auf Kosten des Verlusts der automatischen IP-Auflösung.

Selbst wenn der Timeout-Wert eines Verbindungsstrings für eine volle Minute auf 60 gesetzt ist, geschieht dies beispielsweise innerhalb weniger Sekunden nach dem Versuch. Was führt zu der Frage, warum das Zeitlimit vor dem angegebenen Zeitlimit überschritten wird. DNS.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.