2013-02-12 4 views
5

Ich möchte eine Datenbankverbindung zu meinem SQL Server schnell ausfallen lassen. Wie kann ich das Zeitlimit verringern? Ich habe versucht, Connection Timeout=1 in meine Verbindungszeichenfolge hinzuzufügen, aber dies scheint keinen Unterschied zu machen.Wie kann ich das Verbindungstimeout mit Entity Framework verringern?

Mit Connection Timeout=500 dauert es etwa 8 Minuten 30 Sekunden bis zum Timeout. Dies wird erwartet. Mit Connection Timeout=1 dauert es etwa 40 Sekunden bis zum Timeout, was viel länger ist als erwartet.

Ich fand die EntityConnection.ConnectionTimeout Eigenschaft, aber es ist nur lesbar. Kann ich noch etwas tun, um diese Zeitüberschreitung zu verringern? Ist das ein Problem mit Entity?

UPDATE: Hier ist meine Verbindungszeichenfolge. Es dauert immer noch ~ 40 Sekunden bis zum Timeout.

<add name="KofaxAdminToolsEntities" connectionString="metadata=res://*/DB.Model.KofaxAdminTools.csdl|res://*/DB.Model.KofaxAdminTools.ssdl|res://*/DB.Model.KofaxAdminTools.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MY_DATASOURCE;initial catalog=MY_CATALOG;persist security info=True;user id=MY_USER;password=MY_PASSWORD;MultipleActiveResultSets=True;App=EntityFramework;Connection Timeout=1&quot;" providerName="System.Data.EntityClient" /> 

UPDATE 2: So entdeckte ich, dass das Timeout war ein tcp Timeout, kein SQL Connect Timeout. Wenn mein Rechner den Host erreichen könnte, hätte @marc_s Lösung funktioniert, da ich den Host nicht erreichen kann, kommt das TCP-Timeout ins Spiel. Kann jemand das Tcp-Timeout für eine SqlConnection verringern?

+0

Sie könnten es im Verbindungsstring angeben –

+0

Könnten Sie bitte Ihre Verbindungszeichenfolge posten? – IronMan84

+0

Ihr Update 2 ist korrekt. Auf meinem lokalen Entwickler habe ich einen Alias ​​definiert (mit TCP). Timeout für Verbindungszeichenfolgen funktioniert, dauert aber länger als das, was Sie in der Verbindungszeichenfolge festgelegt haben, wenn ich den Server unter Verwendung von Alias ​​anwähle. Wenn ich den Namen der Datenquelle in den tatsächlichen Namen (nicht den Alias) ändere, funktioniert Connection Timeout = 1 wie erwartet. Vielen Dank. –

Antwort

0

Setzen Sie den folgenden Code in dem Konstruktor Ihrer DbContext Klasse:

((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 1; 
+4

Das ist der ** Befehls-Timeout ** - die Zeitspanne, die ein laufender Befehl verbrauchen kann, bevor er abläuft. Dies hat ** NICHTS ** mit dem ** Verbindungstimeout ** zu tun (die maximal erlaubte Zeit für die ** Verbindung ** zur Datenbank wird geöffnet) –

+0

Wie wäre es mit einer web.config Einstellung? Etwas, das ohne eine vollständige Neukompilierung und Veröffentlichung geändert werden kann. – Triynko

1

Wo und wie Sie diese Verbindung Timeout angegeben haben?

ich gerade versucht, und fügte hinzu, das meine EF-Verbindungszeichenfolge (mit EF-Datenbank-first) - und es funktioniert wie erwartet: mit SQL Server-Dienst beendet, die Verbindungszeit fast sofort versucht, aus ....

<add name="myEntities" 
    connectionString="metadata=res://*/People.csdl|res://*/People.ssdl|res://*/People.msl;provider=System.Data.SqlClient; 
      provider connection string=&quot;data source=.;initial catalog=mydb; 
      integrated security=True;connect timeout=1;multipleactiveresultsets=True; 
             ***************** 
      App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 

(EF-Verbindungszeichenfolge aufgebrochen und aus Gründen der Klarheit eingewickelt - diese lange Linie nur in Ihrem web.config sein wird)

Sie müssen connect timeout=x hinzufügen (wo x in Sekunden, jeder Wert größer als 0 ist ok) innerhalb der provider connection string= Wert Ihrer EF-Verbindungszeichenfolge.

+0

Was macht der Eintrag 'multipleactivesultsets'? Welche Art von Datenbank verbinden Sie mit dieser app.config? – bsara

+0

@Brandon: Dies ist für SQL Server (2005 oder neuer). Die 'multipleactiveresultsets' sind optional - es erlaubt mehrere' SqlDataReader' Verbindungen gleichzeitig –

+0

Ich arbeite zufällig mit Blaine an dieser Frage und weiß, dass er einen MS SQL Express 2005 Server schlägt ... würde das einen Unterschied machen alle? – bsara

Verwandte Themen