¡Hola!
El problema es el siguiente.
Hemos desarrollado una aplicación web ASP.NET usando SQL Server 2000 y estamos experimentando problemas de rendimiento. Al verificar la información de procesos vía Enterprise Manager (o al ejecutar sp_who) vemos que el número de procesos se incrmenta gradualmente hasta saturar el servidor; el estatus de dichos procesos se mantiene en Sleeping.
He escrito el siguiente código para probar el cierre de conexión:
Dim Cnn As New SqlConnection("Cadena de conexion")
Dim Cmd As New SqlCommand("SELECT ...", Cnn)
Dim Rst As SqlDataReader
Cmd.Connection.Open()
rst = Cmd.ExecuteReader(CommandBehavior.CloseConnection)
rst.close
Notamos lo siguiente:
1.- Al llegar a la instrucción de apertura de conexión de inmediato vemos reflejada la conexión en el Servidor de SQL.
2.- Después de pasar por el método close el proceso se sigue viendo en el Servidor de SQL, incluso cuando la aplicación ha terminado; el estado en el que permanece es Sleeping.
3.- El proceso sigue vivo en el server de SQL incluso agregando el cierre de conexión de manera explícita.
4.- Esto sucede incluso cuando se usa un adaptador y un dataset.
¿Qué sucede?
¿ADO.NET no le avisa al IIS que cierre la conexión?
¿IIS no le informa a SQL Server que la cierre?
¿Lo que estamos viendo en SQL son sesiones huérfanas?
Espero me puedan ayudar. Saludos y gracias de antemano.