it-swarm.com.de

Verbindung zu SQL Server funktioniert manchmal

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

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

der zurückgegebene Fehler ist:

Verbindungs-Timeout abgelaufen Die Zeitüberschreitung ist vergangen, als versucht wurde, die Handshake-Bestätigung vor der Anmeldung zu verbrauchen.
Dies kann daran liegen, dass der Handshake vor der Anmeldung fehlgeschlagen ist oder der Server nicht rechtzeitig antworten konnte.
Die Dauer, die beim Verbindungsaufbau zu diesem Server aufgewendet wurde, war - Initialisierung vor der Anmeldung = 42030; Handshake = 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 und hat nur 78 Zeilen.

Auf der selben Maschine , bei der die .NET-Anwendung diesen Fehler empfängt, kann ich jedoch mithilfe von SSMS und der in der Verbindungszeichenfolge angegebenen Benutzer-ID/Kennwort eine Verbindung zu THESERVER herstellen.

Warum kann die Verbindung mit einer ADO.Net-App fehlschlagen, jedoch mit identischen Anmeldeinformationen von SSMS erfolgreich sein?

83
Eric J.

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

Anscheinend endeten einige Verbindungsversuche mit IPv4 und andere mit IPv6.

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

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

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

  • Starten Sie den SQL Server Configuration Manager
  • Öffnen Sie den Knoten SQL Server Network Configuration
  • 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 sowohl Aktiv als auch Aktiviert sind.
84
Eric J.

Ive hatte gerade den gleichen Fehler, der sich verdächtig mit der letzten Runde von Microsoft-Updates (09.02.2016) ausrichtete. Ich habe festgestellt, dass SSMS ohne Probleme verbunden war, während meine ASP.NET-Anwendung den Fehler "Zeitüberschreitung beim Versuch, die Handshake-Bestätigung vor der Anmeldung zu verbrauchen" zurückgegeben hat

Die Lösung für mich war, ein Verbindungs-Timeout von 30 Sekunden in die Verbindungszeichenfolge einzufügen, z. B .:

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

In meiner Situation war die einzige betroffene Verbindung eine, bei der integrierte Sicherheit verwendet wurde, und vor der Verbindung war ich ein Benutzer, der die Identität eines Benutzers verkörperte. Andere Verbindungen zu demselben Server mit SQL-Authentifizierung funktionierten einwandfrei!

Gleichzeitig waren 2 Testsysteme (separate Clients und SQL-Server) betroffen, was zu einem Microsoft-Update führte!

25
Shaun Keon

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

  • Starten Sie den SQL Server Configuration Manager
  • Öffnen Sie den Knoten SQL Server Network Configuration
  • 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 sowohl Aktiv als auch Aktiviert sind.

UND 

  • Stellen Sie für jede aufgelistete IP-Adresse sicher, dass TCP Dynamic Ports leer ist und TCP Port = 1433 (oder ein anderer Port)
  • Öffnen Sie die Windows-Firewall und prüfen Sie, ob der Port in Eingehende Verbindungen geöffnet ist
15
Renzo Ciot

Ich hatte das gleiche Problem, als ich versuchte, von Visual Studio aus über ein VPN eine Verbindung zu einem Server in einem lokalen Netzwerk herzustellen, während ich ein Entity Data Model aufbaute.
Verwaltete das Problem nur durch Setzen von TransparentNetworkIPResolution=false in der Verbindungszeichenfolge. .__ Im Assistenten zum Hinzufügen von Verbindungen finden Sie ihn auf der Registerkarte Erweitert.

6
maozx

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

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

enter image description here

5
Pomster

In meiner ausführbaren Datei, die mit .NET Framework 3.5 erstellt wurde, wurden diese Verbindungsprobleme etwa zur Hälfte gemeldet, nachdem einige Windows-Updates kürzlich installiert wurden (Woche vom 7. August 2017).

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.

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

3
user270576

Ich habe diesen Fehler unter Windows Server 2012 und SQL Server 2012 behoben, indem IPv6 aktiviert und der eingehende Port 1433 freigegeben wurde.

2
smwikipedia

Ich hatte das gleiche Problem, das Problem wurde gelöst durch Öffnen/Aktivieren des Ports 1433 und TCP/IP in SQL Server Configuration Manager und anschließend Neustart des Servers

 enter image description here

1
Myk Agustin

In meinem Fall waren alle Optionen bereits vorhanden.

Gelöst durch Erhöhung des Connection Timeout = 30.  SQL Server management Studio

1
Jignesh

In unserem Fall trat das Problem aufgrund der Konfiguration des Verfügbarkeitsclusters auf. Um dieses Problem zu lösen, mussten wir MultiSubnetFailover in der Verbindungszeichenfolge auf True setzen.

Weitere Details zu MSDN

0
Uriil

Für mich stellt sich heraus, dass die Firewall in Windows Server den Port 1433 blockiert hat, der Standard-SQL Server-Port. Das Hinzufügen einer eingehenden Regel, um diese Verbindungen zu akzeptieren, machte den Trick für mich aus.

Bevor Sie mehr Zeit verlieren, um das Problem zu lösen, versuchen Sie wie ich, Starten Sie Ihren Windows-Computer neu. Arbeitete für mich, nachdem ich alle anderen Lösungen angewendet hatte.

0
chainstair

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

0
user3424480

Dieses Problem hatte ich bei einer Migration von SharePoint 2010 nach 2013. Ich hatte den Verdacht, dass sich der Datenbankserver auf der anderen Seite einer Firewall befindet, die IP6 nicht weiterleitet, so dass versucht wurde, IP6 zu verwenden und beim Herstellen der Verbindung zur Datenbank ein Fehler auftritt.

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

0

Ich hatte das gleiche Problem, aber ich stellte eine Verbindung zu einer Remote-Datenbank mit einer statischen IP-Adresse her. Also löste keine der oben genannten Lösungen mein Problem. 

Es war mir nicht gelungen, die richtige Benutzerzuordnung für die Sicherheitsanmeldung hinzuzufügen, die ich verwendete. Daher bestand die Lösung für mich lediglich darin, sicherzustellen, dass die Einstellung für die Benutzerzuordnung auf meine Datenbank zugreifen konnte.

0
John Livermore

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
Robert Benyi

In meinem Fall verursacht der Parameter Persist Security Info=true mit dem Benutzer und dem Kennwort in der Verbindungszeichenfolge das Problem. Entfernen Sie den Parameter oder setzen Sie ihn auf false, um das Problem zu beheben.

0
Ricardo Fontana

Der Fehler "Verbindungszeitüberschreitung abgelaufen" tritt häufig in den folgenden Fällen auf

  • Eine Instanz des SQL Server-Datenbankmoduls wird nicht ausgeführt.
  • Der SQL Server-Browserdienst wird nicht ausgeführt.
  • Das TCP/IP ist deaktiviert.
  • Der Servername wurde falsch eingegeben.
  • Es gibt Netzwerkprobleme.
  • Der TCP/IP-Port für die Database Engine-Instanz wird von einer Firewall blockiert.
  • Der Client und der Server sind nicht dafür konfiguriert, dasselbe Netzwerkprotokoll zu verwenden.

Um zu überprüfen, wie dieser Fehler anhand der oben genannten Gründe ermittelt werden kann, überprüfen Sie Verbindungszeitüberschreitung abgelaufen. Die Zeitüberschreitung ist vergangen, als versucht wurde, die Handshake-Bestätigung vor der Anmeldung zu verbrauchen