Kann ich das Zeitlimit erhöhen, indem ich die Verbindungszeichenfolge in der web.config
ändern?
Kann ich das Zeitlimit erhöhen, indem ich die Verbindungszeichenfolge in der web.config
ändern?
Antworten:
Ja, Sie können ;Connection Timeout=30
an Ihre Verbindungszeichenfolge anhängen und den gewünschten Wert angeben.
Der in der Connection Timeout
Eigenschaft festgelegte Zeitlimitwert ist eine in Sekunden ausgedrückte Zeit . Wenn diese Eigenschaft nicht festgelegt ist, ist der Zeitlimitwert für die Verbindung der Standardwert (15 Sekunden).
Wenn Sie den Timeout-Wert auf festlegen 0
, geben Sie außerdem an, dass Ihr Verbindungsversuch unendlich lange wartet. Wie in der Dokumentation beschrieben, sollten Sie dies nicht in Ihrer Verbindungszeichenfolge festlegen:
Der Wert 0 gibt keine Begrenzung an und sollte in einem ConnectionString vermieden werden, da ein Verbindungsversuch auf unbestimmte Zeit wartet.
Hmmm...
Wie Darin sagte, können Sie einen höheren Wert für das Verbindungszeitlimit angeben, aber ich bezweifle, dass dies wirklich das Problem ist.
Wenn Verbindungszeitüberschreitungen auftreten, tritt normalerweise ein Problem mit einem der folgenden Probleme auf:
Netzwerkkonfiguration - langsame Verbindung zwischen Ihrem Webserver / Ihrer Entwicklungsbox und dem SQL Server. Durch Erhöhen des Zeitlimits kann dies möglicherweise behoben werden. Es ist jedoch ratsam, das zugrunde liegende Problem zu untersuchen.
Verbindungszeichenfolge. Ich habe Probleme gesehen, bei denen ein falscher Benutzername / ein falsches Passwort aus irgendeinem Grund einen Timeout-Fehler anstelle eines echten Fehlers anzeigt, der "Zugriff verweigert" anzeigt. Das sollte nicht passieren, aber so ist das Leben.
Verbindungszeichenfolge 2: Wenn Sie den Namen des Servers falsch oder unvollständig angeben (z. B. mysqlserver
anstelle von mysqlserver.webdomain.com
), wird eine Zeitüberschreitung angezeigt. Können Sie den Server mit dem Servernamen genau so anpingen , wie in der Verbindungszeichenfolge in der Befehlszeile angegeben?
Verbindungszeichenfolge 3: Wenn sich der Servername in Ihrem DNS (oder Ihrer Hosts-Datei) befindet, aber auf eine falsche oder unzugängliche IP verweist, wird eher eine Zeitüberschreitung als ein Fehler angezeigt, bei dem der Computer nicht gefunden wurde.
Die Abfrage, die Sie anrufen, läuft ab. Es kann so aussehen, als ob die Verbindung zum Server das Problem ist. Abhängig von der Struktur Ihrer App können Sie es jedoch bis zu dem Stadium schaffen, in dem Ihre Abfrage ausgeführt wird, bevor das Zeitlimit auftritt.
Verbindung leckt. Wie viele Prozesse laufen? Wie viele offene Verbindungen? Ich bin nicht sicher, ob Raw ADO.NET ein Verbindungspooling durchführt, Verbindungen bei Bedarf automatisch in einer Unternehmensbibliothek schließt oder wo alles konfiguriert ist. Dies ist wahrscheinlich ein roter Hering. Bei der Arbeit mit WCF und Webdiensten hatte ich jedoch Probleme mit nicht geschlossenen Verbindungen, die zu Zeitüberschreitungen und anderen unvorhersehbaren Verhaltensweisen führten.
Dinge zu versuchen:
Erhalten Sie eine Zeitüberschreitung, wenn Sie mit SQL Management Studio eine Verbindung zum Server herstellen? In diesem Fall ist wahrscheinlich die Netzwerkkonfiguration das Problem. Wenn beim Herstellen einer Verbindung mit Management Studio kein Problem auftritt, liegt das Problem in Ihrer App und nicht auf dem Server.
Führen Sie SQL Profiler aus und sehen Sie, was tatsächlich über die Leitung läuft. Sie sollten feststellen können, ob Sie wirklich eine Verbindung herstellen oder ob eine Abfrage das Problem ist.
Führen Sie Ihre Abfrage in Management Studio aus und sehen Sie, wie lange es dauert.
Viel Glück!
Wenn Sie es dynamisch ändern möchten, bevorzuge ich die Verwendung von SqlConnectionStringBuilder .
Sie können ConnectionString, dh eine Zeichenfolge, in die Klasse Object konvertieren. Alle Eigenschaften der Verbindungszeichenfolge werden zu ihrem Mitglied.
In diesem Fall besteht der eigentliche Vorteil darin, dass Sie sich keine Sorgen machen müssen, ob der ConnectionTimeout-Zeichenfolgenteil bereits in der Verbindungszeichenfolge vorhanden ist oder nicht.
Auch wenn es ein Objekt erstellt und es immer gut ist, einen Wert im Objekt zuzuweisen, anstatt eine Zeichenfolge zu manipulieren.
Hier ist das Codebeispiel:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);
ConnectionTimeout
Eigenschaft für den SqlConnection
Typ schreibgeschützt zu machen.