asp.net exception membership semaphore

SemaphoreFullException al verificar la función del usuario a través de la membresía de ASP.NET



membership (8)

Tengo una página que comprueba que un usuario tiene un rol particular antes de realizar alguna tarea, y no ha tenido ningún problema con la funcionalidad y no ha hecho cambios relacionados obvios al código en cuestión. El sitio está en mi máquina de desarrollo (Windows Vista) que ejecuta IIS 7.0 y la base de datos es MS SQL 2005 en un servidor separado. De repente, todas las llamadas al User.IsInRole están dando como resultado

System.Threading.SemaphoreFullException: Agregar el recuento especificado al semáforo haría que supere su recuento máximo.

Estoy seguro de que reiniciar IIS "resolverá" el problema, pero me gustaría entender qué lo causó para asegurarme de que no ocurra en mi sitio de producción.

La parte superior de la pila es:

[SemaphoreFullException: Agregar el conteo especificado al semáforo haría que excediera su recuento máximo.] System.Threading.Semaphore.Release (Int32 releaseCount) +6065293 System.Data.ProviderBase.DbConnectionPool.PutNewObject (DbConnectionInternal obj) +57 Sistema. Data.ProviderBase.DbConnectionPool.DeactivateObject (DbConnectionInternal obj) +338 System.Data.ProviderBase.DbConnectionPool.PutObject (DbConnectionInternal obj, Object owningObject) +163 System.Data.ProviderBase.DbConnectionInternal.CloseConnection (DbConnection owningObject, DbConnectionFactory connectionFactory) +117 Sistema .Data.SqlClient.SqlInternalConnection.CloseConnection (DbConnection owningObject, DbConnectionFactory connectionFactory) +37 System.Data.SqlClient.SqlConnection.Close () +158 System.Web.DataAccess.SqlConnectionHolder.Close () +25 System.Web.Security.SqlRoleProvider .GetRolesForUser (String username) +847 System.Web.Security.RolePrincipal.IsInRole (String role) +182


¡Al reiniciar ASP.NET Cassini en la barra de tareas de Windows arreglé esto para mí!


Comencé a recibir este error más o menos cada otra construcción esta mañana. Reiniciar el servidor de Development LocalHost comenzó a ser realmente tedioso, así que comencé a cavar. Para abreviar, existía un par SqlConnection / SqlCommand que nunca se desechó, refactorizando ese código detuvo la Excepción.


Este problema se solucionó al reiniciar ASP.NET Development Server en la barra de tareas de Windows.

O permanentemente agregando ''Pooling = False;'' a la cadena de conexión debería resolver el problema.


Esto me sucedió cuando inserté un punto de interrupción en una línea que estaba haciendo una llamada SQL.

Colocar el punto de interrupción en un punto posterior (no en una llamada SQL) resolvió el problema por mí.


Lo estoy recibiendo ocasionalmente también.

Creo que en mi caso, estaba ocurriendo porque estaba deteniendo el depurador durante la ejecución de la página, por lo que tal vez el conjunto de conexiones de db se echó a perder.

Hay un largo hilo discutiendo esto aquí: http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/b5b7a179-3737-4380-b6cf-843f3e71b317/

con varios usuarios informando lo mismo. No hay una conclusión definitiva, Microsoft parece sentir que nuestras aplicaciones están cerrando un mango que no deberían. Pero en nuestra aplicación, al menos, no hay llamadas CloseHandle.

Si se tratara de un error genuino en la agrupación de conexiones de db, habría pensado que se encontraría hace mucho tiempo, ya que este es el material que ejecuta cada sitio web asp.net ...


Obtuve lo mismo cuando ejecuté IIS localmente. Parece deberse a detener el depurador al iniciar el sitio. Correr ''iisreset'' lo solucionó.


Reiniciar Visual Studio lo resolvió para mí. Había detenido el depurador durante una carga de página.


Sé que ha sido publicado, pero así es como lo obtuve y lo resolvió.

Lo que hice Ponga un punto de quiebre cerca del segmento de código que hace una llamada SQL.

¿Qué lo resolvió? Reiniciar ASP.NET Development Server en la bandeja del sistema de Windows (junto a su reloj en la esquina inferior derecha)