2013-05-08 8 views
9

Wenn ich versuche, den folgenden Code zu tun, hängt das Programm auf unbestimmte Zeit. Ich weiß nicht warum und es scheint noch andere offene Fragen zu geben. Wenn die IP \ -Website jedoch nicht erreicht werden kann, funktioniert sie wie vorgesehen.Connection.open für Hänge unbegrenzt, keine Ausnahme wird geworfen

private void DoStuff() 
    { 
     string connectionString = "Data Source=www.google.com;Connection Timeout=5"; 
     using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 
      connection.Open(); //Hangs here indefinitely 
      Console.WriteLine("Test"); 
     } 
    } 

Zum Beispiel, wenn ich die Verbindungszeichenfolge

connectionString = "Data Source=www.nonexistentsite.com;Connection Timeout=5";

dann erhält es eine Ausnahme werfen. Wie bekomme ich eine Ausnahme für eine aktive Site? ... Auch google ist nur für Testzwecke, offensichtlich.

EDIT:

Wenn ich versuche, zu einem nicht erreichbaren Server-Namen oder die IP-Adresse verbinden ich WILL diese Ausnahme erhalten ...

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

UPDATE:

Nachdem das Programm eine ganze Weile laufen gelassen wurde, ist es normalerweise ou t endlich nach 3-5 Minuten und gibt mir den Fehler, den ich oben gepostet habe. Wie kann ich es schneller zum Timeout bringen?

+1

Gibt es genaue Anmeldeinformationen? Normalerweise würden Sie in Ihrer Verbindungszeichenfolge einen Benutzernamen und ein Passwort eingeben, es sei denn, Sie sind absolut sicher, * dass die Datenbank anonyme Verbindungen akzeptiert. – qJake

+1

Das Standard-Timeout beträgt 15 Sekunden. Es sollte also 15 Sekunden lang anhalten, nicht unbegrenzt. –

+0

@SpikeX - Mein Problem im Moment ist, dass ich keine Ausnahmen bekomme, ich möchte jetzt einige, damit ich weiß, was zu tun ist. – TheKobra

Antwort

5

Wenn Sie für Ihren Data Source einen FQDN (Fully Qualified Domain Name) wie example.com festgelegt haben und der DNS-Server diesen FQDN für eine lange Zeit nicht auflösen kann, ist es ziemlich offensichtlich, dass Ihre Anfrage abhängt. Stellen Sie sicher, dass der Computer, auf dem Sie Ihre Anwendung ausführen, den SQL Server erreichen und ohne Probleme beheben kann. Wahrscheinlich möchten Sie auch sicherstellen, dass keine Firewall die Anfrage blockiert.

Eine andere mögliche Ursache für diese Symptome ist, wenn Sie den Verbindungspool von ADO.NET erschöpft haben. Dies kann passieren, wenn Sie viele langsame SQL-Abfragen parallel ausführen, die jeweils eine physische Verbindung zur Datenbank herstellen. Die Anzahl der verfügbaren Verbindungen in diesem Pool ist begrenzt. Wenn dieses Limit erreicht wird, wartet der nächste Anruf auf connection.Open() möglicherweise darauf, dass eine verfügbare Verbindung in den Pool zurückgegeben wird.

Anmerkung: Sie müssen möglicherweise auch in Ihrer Verbindungszeichenfolge angeben, wie Sie sich gegenüber dem SQL-Server authentifizieren möchten. Checkout connectionstrings.com für weitere Beispiele.

All dies ist zu sagen, dass es absolut nichts falsch in der C# -Code ist, die Sie in Ihrer Frage geschrieben haben. Es sieht eher wie ein Netzwerkproblem aus, das Sie Ihren Netzwerkadministratoren zur Kenntnis bringen könnten.

Verwandte Themen