Abbiamo un servizio WCF ospitato su IIS, in esecuzione su un server. Il servizio si connette a un'istanza di SQL Server in esecuzione su un altro server. Nel nostro codice, apriamo e chiudiamo la connessione per ogni richiesta. Il servizio WCF effettua diverse richieste al minuto nel database.Cosa può causare che SqlClient riutilizza le connessioni non valide?
Se riavvio il servizio SQL senza arrestare il servizio WCF, il servizio WCF avvia gli errori di registrazione nel log degli errori, il che è perfettamente normale.
Il problema è che a volte (non sempre), dopo che il servizio SQL è stato riavviato, il servizio WCF continua a rapporti di questo errore su ogni richiesta:
Cannot open database "mydatabase" requested by the login. The login failed."
L'analisi dello stack dell'errore termina con:
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
Mentre ciò accade, sono in grado di connettersi al database utilizzando SQL Management Studio (dalla stessa macchina che esegue il servizio WCF). Per risolvere il problema, devo riciclare il pool di applicazioni per il mio servizio WCF.
Quindi la mia domanda è: cosa può causare questo e cosa posso fare per garantire che la mia app possa recuperare da un riavvio SQL?
P.S .: Nella mia casella di sviluppo (che esegue anche IIS), quando eseguo lo stesso test, ottengo lo stesso errore alcune volte (mentre il database viene avviato, suppongo) e quindi riprende a funzionare.
Si consiglia di provare a intercettare SqlException e verificare il codice di errore specifico, quindi chiamare SqlConnection.ClearPool (sqlConnection); quindi riprovare la dichiarazione ancora una volta – Termit