通过ASP.NET成员资格检查用户角色时的SemaphoreFullException

Sta*_*ing 36 membership asp.net semaphore exception

我有一个页面,在执行某项任务之前检查用户是否处于特定角色,并且对功能没有任何问题,并且没有对相关代码进行明显的相关更改.该站点位于运行IIS 7.0的开发计算机(Windows Vista)上,数据库位于单独的服务器上,是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,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(String username)+847 System.Web.Security.RolePrincipal.IsInRole(String role)+182

hag*_*oft 24

通过在Windows任务栏上重新启动ASP.NET Development Server来解决此问题.

或永久添加'Pooling = False;' 连接字符串应解决问题.

  • 禁用池具有巨大的性能影响.这个答案表明极其糟糕的建议. (17认同)

O'R*_*ney 11

我偶尔也会得到它.

我相信在我的情况下,它发生是因为我在页面执行期间停止了调试器,所以可能数据库连接池搞砸了.

这里有一个很长的讨论:http: //social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/b5b7a179-3737-4380-b6cf-843f3e71b317/

与各种用户报告相同的事情.没有明确的结论,微软似乎觉得我们的应用程序正在关闭他们不应该处理的句柄.但在我们的应用程序中至少没有CloseHandle调用.

如果它是数据库连接池中的真正错误,我会认为它很久以前就会被发现,因为这是运行每个asp.net网站的东西......

  • 我相信在我的情况下,它可能正在发生,因为我在页面执行期间停止了调试器,所以可能数据库连接池搞砸了. (24认同)

Luk*_*kas 11

我知道它已被发布,但这是我如何得到它,以及解决它的原因.

我做什么在进行SQL调用的代码段附近放置一个断点.

是什么原因解决了它 在Windows系统托盘中重启ASP.NET开发服务器(在右下角的时钟旁边)


Cod*_*man 6

当我在正在进行SQL调用的行上插入断点时,这发生在我身上.

将断点放在稍后的位置(而不是在SQL调用中)解决了我的问题.


小智 5

在Windows任务栏上重新启动ASP.NET Cassini对我来说解决了这个问题!


小智 5

重新启动Visual Studio为我解决了它。我在页面加载期间停止了调试器。