Ответ 1
Эта проблема была устранена перезапуском ASP.NET Development Server на панели задач Windows.
Или навсегда, добавив "Pooling = False"; строка подключения должна решить проблему.
У меня есть страница, которая проверяет, что пользователь находится в определенной роли перед выполнением какой-либо задачи, и не имел проблем с функциональностью и не делал никаких очевидных связанных изменений с данным кодом. Сайт находится на моей машине разработки (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
Эта проблема была устранена перезапуском ASP.NET Development Server на панели задач Windows.
Или навсегда, добавив "Pooling = False"; строка подключения должна решить проблему.
Я получаю это время от времени тоже.
Я считаю, что в моем случае это происходило, потому что я останавливал отладчик во время выполнения страницы, поэтому, возможно, пул подключений db запутался.
Существует длинная тема, обсуждающая это здесь: http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/b5b7a179-3737-4380-b6cf-843f3e71b317/
при этом разные пользователи сообщают о том же. Нет определенного вывода, Microsoft, похоже, считает, что наши приложения закрывают ручку, которой они не должны. Но в нашем приложении, по крайней мере, нет вызовов CloseHandle.
Если бы это была настоящая ошибка в пуле соединений db, я бы подумал, что это будет найдено давно, так как это материал, который запускает каждый веб-сайт asp.net...
Я знаю, что это было опубликовано, но вот как я понял, и что это разрешило.
Что я сделал Поместите точку останова рядом с сегментом кода, который выполняет вызов SQL.
Что его решило Перезапуск ASP.NET Development Server в системном трее Windows (рядом с вашими часами в нижнем правом углу)
Это случилось со мной, когда я вставил точку прерывания в строку, которая выполняла вызов SQL.
Размещение точки останова в более поздней точке (а не на вызове SQL) решило проблему для меня.
Перезапуск ASP.NET Cassini на панели задач Windows исправил это для меня!
Перезапуск Visual Studio решил это для меня. Я остановил отладчик во время загрузки страницы.
Я начал получать эту ошибку примерно каждую другую сборку сегодня утром. Перезапуск сервера LocalHost стал действительно утомительным, поэтому я начал копать. Короче говоря, была пара SqlConnection
/SqlCommand
, которая никогда не была удалена, рефакторинг этого кода остановил Exception.
Я получил то же самое при работе на IIS на местном уровне. Кажется, это связано с остановкой отладчика при запуске сайта. Запуск "iisreset" исправил его.