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?