web-dev-qa-db-fra.com

SemaphoreFullException lors de la vérification du rôle d'utilisateur via un abonnement ASP.NET

J'ai une page qui vérifie qu'un utilisateur a un rôle particulier avant d'exécuter une tâche, n'a rencontré aucun problème de fonctionnalité et n'a apporté aucune modification liée évidente au code en question. Le site se trouve sur ma machine de développement (Windows Vista) exécutant IIS 7.0 et la base de données est MS SQL 2005 sur un serveur distinct. Tout à coup, tous les appels au User.IsInRole entraînent 

System.Threading.SemaphoreFullException: L'ajout du nombre spécifié au sémaphore entraînerait le dépassement de son nombre maximal.

Je suis certain que le redémarrage de IIS "résoudra" le problème, mais j'aimerais comprendre la cause du problème afin que je puisse m'assurer que cela ne se produira pas sur mon site de production.

Le haut de la trace de la pile est:

[SemaphoreFullException: l'ajout du nombre spécifié au sémaphore entraînerait le dépassement de son nombre maximal.] System.Threading.Semaphore.Release (Int32 releaseCount) +6065293 System.Data.ProviderBase.DbConnectionPool.PutNewObject (obj DbConnectionInternal) +57 System.Data.ProviderBase.DbConnectionPool.DeactivateObject (obj DbConnectionInternal) +338 System.Data.ProviderBase.DbConnectionPool.PutObject (DbConnectionInternal obj, Object owningObject) +163 System.Data.ProviderBase.DbConnectionInternal.CloseConnection (DbConnection owningObject, DbConnectionFactory connectionFactory) +117 System.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 (nom d'utilisateur de la chaîne) +847 System.Web.Security.RolePrincipal.IsInRole (rôle de chaîne) +182

36
Stark Raving

Ce problème a été résolu en redémarrant ASP.NET Development Server sur la barre des tâches Windows.

Ou de manière permanente en ajoutant 'Pooling = False;' à la chaîne de connexion devrait résoudre le problème.

24
hagensoft

Je le reçois de temps en temps aussi.

Je crois que dans mon cas, cela se produisait parce que j'arrêtais le débogueur pendant l'exécution de la page. Le pool de connexions à la base de données a donc peut-être été gâché. 

Il existe un long fil de discussion à ce sujet ici: http://social.msdn.Microsoft.com/forums/en-US/adodotnetdataproviders/thread/b5b7a179-3737-4380-b6cf-843f3e71b317/

alors que plusieurs utilisateurs signalent la même chose… Il n’ya pas de conclusion définitive, Microsoft semble penser que nos applications ferment une poignée qu’elles ne devraient pas fermer. Mais dans notre application, au moins, il n'y a pas d'appels CloseHandle.

Si c’était un véritable bogue dans le pooling de connexions de bases de données, j’aurais pensé qu’il se trouverait il ya longtemps, car c’est le matériel qui gère tous les sites Web asp.net ...

11
O'Rooney

Je sais que cela a été posté, mais voici comment je l’ai obtenu et ce qui l’a résolu.

Ce que j'ai fait Placez un point d'arrêt près du segment de code qui effectue un appel SQL.

What Solved It Redémarrage du serveur de développement ASP.NET dans la barre d'état système Windows (à côté de votre horloge dans le coin inférieur droit)

10
Lukas

Cela m'est arrivé lorsque j'ai inséré un point d'arrêt sur une ligne qui passait un appel SQL.

Placer le point d'arrêt à un moment ultérieur (pas à un appel SQL) a résolu le problème pour moi.

6
Codeman

Redémarrer Visual Studio l'a résolu pour moi. J'avais arrêté le débogueur lors du chargement d'une page.

4
CailinP

Le redémarrage de ASP.NET Cassini sur la barre des tâches Windows a corrigé cela pour moi!

4
Mike

J'ai commencé à avoir cette erreur à peu près toutes les autres versions ce matin. Le redémarrage du serveur de développement LocalHost a commencé à devenir vraiment fastidieux, alors j'ai commencé à creuser. En résumé, il y avait une paire SqlConnection/SqlCommand qui n'a jamais été éliminée, le refactoring de ce code a arrêté l'Exception.

1
MikeTheLiar

J'ai eu la même chose quand je cours sur IIS localement. Cela semble être dû à l’arrêt du débogueur lors du démarrage du site. Courir 'iisreset' corrige le problème.

0
MikeD