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

时间:2011-07-29 17:15:56

标签: asp.net exception membership semaphore

我有一个页面,在执行某项任务之前检查用户是否处于特定角色,并且对功能没有任何问题,并且没有对相关代码进行明显的相关更改。该站点位于运行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

8 个答案:

答案 0 :(得分:24)

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

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

答案 1 :(得分:11)

我偶尔也会得到它。

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

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

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

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

答案 2 :(得分:10)

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

我做了什么 在发出SQL调用的代码段附近放置一个断点。

解决了什么 在Windows系统托盘中重新启动ASP.NET Development Server(在右下角的时钟旁边)

答案 3 :(得分:6)

当我在正在进行SQL调用的行上插入断点时,发生了这种情况。

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

答案 4 :(得分:4)

在Windows任务栏上重新启动ASP.NET Cassini为我修复了这个问题!

答案 5 :(得分:4)

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

答案 6 :(得分:1)

我今天早上大致每隔一段时间就开始收到此错误。重新启动开发LocalHost服务器开始变得非常繁琐,所以我开始挖掘。长话短说,有一对SqlConnection / SqlCommand对从未处理过,重构该代码会停止异常。

答案 7 :(得分:0)

在本地运行IIS时我得到了同样的东西。似乎是由于在启动站点时停止调试器。运行'iisreset'修复它。