Подтвердить что ты не робот

SemaphoreFullException при проверке роли пользователя через членство в ASP.NET

У меня есть страница, которая проверяет, что пользователь находится в определенной роли перед выполнением какой-либо задачи, и не имел проблем с функциональностью и не делал никаких очевидных связанных изменений с данным кодом. Сайт находится на моей машине разработки (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(имя пользователя) +847     System.Web.Security.RolePrincipal.IsInRole(роль строки) +182

4b9b3361

Ответ 1

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

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

Ответ 2

Я получаю это время от времени тоже.

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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