Tenemos un servicio WCF alojado en IIS, ejecutándose en un servidor. El servicio se conecta a una instancia de SQL Server que se ejecuta en otro servidor. En nuestro código, abrimos y cerramos la conexión para cada solicitud. El servicio WCF realiza varias solicitudes por minuto a la base de datos.¿Qué puede hacer que SqlClient reutilice las conexiones no válidas?
Si reinicio el servicio SQL sin detener el servicio WCF, el servicio WCF comienza a registrar errores en nuestro registro de errores, lo cual es perfectamente normal.
El problema es que a veces (no siempre), después de que el servicio de SQL se ha reiniciado, el servicio WCF continúa informes de este error en cada petición:
Cannot open database "mydatabase" requested by the login. The login failed."
El seguimiento de la pila del error 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()
Mientras esto sucede, puedo conectarme a la base de datos utilizando SQL Management Studio (desde la misma máquina que ejecuta el servicio WCF). Para solucionar el problema, tengo que reciclar el grupo de aplicaciones para mi servicio WCF.
Así que mi pregunta es: ¿Qué puede causar esto y qué puedo hacer para asegurar que mi aplicación pueda recuperarse de un reinicio de SQL?
P.S .: En mi cuadro de desarrollo (también ejecutando IIS), cuando hago la misma prueba me sale el mismo error varias veces (mientras que la base de datos se comienza a cargar, supongo) y luego vuelve a funcionar.
Es posible que desee tratar de atrapar la SqlException y verificar el código de error específico, luego llamar a SqlConnection.ClearPool (sqlConnection); luego vuelva a intentar la declaración una vez más – Termit