SemaphoreFullException при проверке роли пользователя через членство в ASP.NET - PullRequest
36 голосов
/ 29 июля 2011

У меня есть страница, которая проверяет, что пользователь выполняет определенную роль, перед выполнением какой-либо задачи, у меня не было проблем с функциональностью, и я не внес никаких очевидных связанных изменений в рассматриваемый код. Сайт находится на моей машине разработки (Windows Vista) под управлением IIS 7.0, а база данных - MS SQL 2005 на отдельном сервере. Внезапно все вызовы на User.IsInRole приводят к

System.Threading.SemaphoreFullException: добавление указанного числа в семафор приведет к превышению максимального значения.

Я уверен, что перезапуск IIS «решит» проблему, но я хотел бы понять, что вызвало ее, чтобы убедиться, что это не произойдет на моей производственной площадке.

Вершина трассировки стека:

[SemaphoreFullException: добавление указанного числа в семафор приведет к превышению максимального значения.] System.Threading.Semaphore.Release (Int32 releaseCount) +6065293 System.Data.ProviderBase.DbConnectionPool.PutNewObject (DbConnectionInternal obj) +57 System.Data.ProviderBase.DbConnectionPool.DeactivateObject (DbConnectionInternal obj) +338 System.Data.ProviderBase.DbConnectionPool.PutObject (DbConnectionInternal obj, объект 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 (String username) +847 System.Web.Security.RolePrincipal.IsInRole (строковая роль) + 182

Ответы [ 8 ]

24 голосов
/ 10 октября 2012

Эта проблема была исправлена ​​путем перезапуска ASP.NET Development Server на панели задач Windows.

Или навсегда, добавив 'Pooling = False;'к строке подключения должен решить вопрос.

11 голосов
/ 06 февраля 2013

Я знаю, что это было опубликовано, но вот как я получил это, и что решило это.

Что я сделал Поместите точку останова рядом с сегментом кода, который выполняет вызов SQL.

Что решило Перезапуск сервера разработки ASP.NET в системном трее Windows (рядом с часами в правом нижнем углу)

11 голосов
/ 31 августа 2011

Я тоже иногда получаю это.

Я полагаю, что в моем случае это происходило потому, что я останавливал отладчик во время выполнения страницы, так что, возможно, пул соединений с БД был испорчен.

Здесь обсуждается длинная тема: http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/b5b7a179-3737-4380-b6cf-843f3e71b317/

, когда разные пользователи сообщают об одном и том же.Нет определенного заключения, Microsoft, кажется, чувствует, что наши приложения закрывают ручку, которую они не должны.Но в нашем приложении, по крайней мере, нет вызовов CloseHandle.

Если бы это была настоящая ошибка в пуле соединений с БД, я бы подумал, что это будет найдено давно, так как это то, что запускает каждый asp.net.сайт ...

6 голосов
/ 30 июня 2012

Это случилось со мной, когда я вставил точку останова в строку, которая выполняла вызов SQL.

Размещение точки останова в более поздней точке (не при вызове SQL) решило проблему для меня.

5 голосов
/ 17 июня 2014

Перезапуск Visual Studio решил это за меня. Я остановил отладчик во время загрузки страницы.

5 голосов
/ 25 октября 2012

Перезапуск ASP.NET Cassini на панели задач Windows исправил это для меня!

1 голос
/ 06 сентября 2013

Я начал получать эту ошибку примерно каждый второй билд этим утром. Перезапуск сервера разработки LocalHost стал действительно утомительным, поэтому я начал копать. Короче говоря, была пара SqlConnection / SqlCommand, которая никогда не была ликвидирована, рефакторинг этого кода остановил исключение.

0 голосов
/ 16 января 2013

Я получил то же самое при работе на IIS локально.Кажется, из-за остановки отладчика при запуске сайта.Запуск iisreset исправил это.

...