Posso aumentare il timeout modificando la stringa di connessione nel web.config
?
Posso aumentare il timeout modificando la stringa di connessione nel web.config
?
Risposte:
Sì, puoi aggiungere ;Connection Timeout=30
alla stringa di connessione e specificare il valore che desideri.
Il valore di timeout impostato nella Connection Timeout
proprietà è un tempo espresso in secondi . Se questa proprietà non è impostata, il valore di timeout per la connessione è il valore predefinito (15 secondi).
Inoltre, impostando il valore di timeout su 0
, stai specificando che il tuo tentativo di connessione attende un tempo infinito. Come descritto nella documentazione, questo è qualcosa che non dovresti impostare nella tua stringa di connessione:
Un valore di 0 indica nessun limite e dovrebbe essere evitato in una ConnectionString perché un tentativo di connessione attende indefinitamente.
Hmmm ...
Come ha detto Darin, puoi specificare un valore di timeout di connessione più alto, ma dubito che sia davvero il problema.
Quando si verificano timeout di connessione, in genere è un problema con uno dei seguenti:
Configurazione di rete: connessione lenta tra il server Web / dev box e il server SQL. L'aumento del timeout può risolvere questo problema, ma sarebbe saggio indagare sul problema sottostante.
Stringa di connessione. Ho riscontrato problemi in cui un nome utente / password errati, per qualche motivo, restituirà un errore di timeout invece di un errore reale che indica "accesso negato". Questo non dovrebbe accadere, ma la vita è così.
Stringa di connessione 2: se si specifica il nome del server in modo errato o incompleto (ad esempio, mysqlserver
invece di mysqlserver.webdomain.com
), verrà visualizzato un timeout. È possibile eseguire il ping del server utilizzando il nome del server esattamente come specificato nella stringa di connessione dalla riga di comando?
Stringa di connessione 3: se il nome del server è nel tuo DNS (o nel file hosts), ma punta a un IP errato o inaccessibile, riceverai un timeout anziché un errore di macchina non trovata.
La query che stai chiamando sta scadendo. Può sembrare che il problema sia la connessione al server, ma, a seconda di come è strutturata la tua app, potresti arrivare allo stadio in cui è in esecuzione la tua query prima che si verifichi il timeout.
Perdite di connessione. Quanti processi sono in esecuzione? Quante connessioni aperte? Non sono sicuro se il raw ADO.NET esegua il pool di connessioni, chiuda automaticamente le connessioni quando necessario come Enterprise Library o dove tutto ciò è configurato. Questa è probabilmente una falsa pista. Tuttavia, lavorando con WCF e servizi Web, ho riscontrato problemi con connessioni non chiuse che causavano timeout e altri comportamenti imprevedibili.
Cose da provare:
Si verifica un timeout quando ci si connette al server con SQL Management Studio? In tal caso, è probabile che il problema sia la configurazione della rete. Se non vedi un problema durante la connessione con Management Studio, il problema sarà nella tua app, non con il server.
Esegui SQL Profiler e guarda cosa sta effettivamente succedendo. Dovresti essere in grado di capire se ti stai davvero connettendo o se il problema è una query.
Esegui la tua query in Management Studio e guarda quanto tempo ci vuole.
In bocca al lupo!
Se vuoi cambiarlo dinamicamente, preferisco usare SqlConnectionStringBuilder .
Ti permette di convertire ConnectionString cioè una stringa in oggetto di classe, tutte le proprietà della stringa di connessione diventeranno il suo membro.
In questo caso il vero vantaggio sarebbe che non devi preoccuparti Se la parte della stringa ConnectionTimeout è già presente nella stringa di connessione o no?
Inoltre, poiché crea un oggetto ed è sempre utile assegnare un valore all'oggetto piuttosto che manipolare la stringa.
Ecco il codice di esempio:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);
ConnectionTimeout
proprietà sul SqlConnection
tipo di sola lettura sia stata considerata una buona idea.