我一直在这个SemaphoreFullException安静一段时间.
总结一下..
我已经在IIS 7.5上使用ASP.NET v4.0框架应用程序池(集成)托管了一个应用程序.
我正在使用Windows身份验证通过域(isinrole)来验证我的用户.
我已经看到关于这个主题的所有其他线程,建议设置Pooling = False.
我不想这样做,我希望继续使用池,因为性能优势.
我正在使用Entity Framework 6来查询数据库,而不是将dbcontext“处置”到用户代码的任何地方.
看起来这个问题在DbConnectionPool代码中.
在任何给定的时刻,该错误随机发生.应用程序是否被使用无关紧要.有时,由于这个问题 – 我必须重新启动IIS,因为新用户停止获得身份验证.
到目前为止我已经尝试过
>检查是否正在处理DB事务对象.
>检查DBContext(ctx)是否被提前处理.
>检查应用程序生成(32/62位).在这种情况下 – 我以任何cpu模式构建应用程序,而我的服务器是64位.
注意:在我的应用程序中,我主要使用linq-to-EF对象来查询数据库.
Exception: System.Threading.SemaphoreFullException Message: Adding the specified count to the semaphore would cause it to exceed its maximum count. StackTrace: at System.Threading.Semaphore.Release(Int32 releaseCount) at System.Data.ProviderBase.DbConnectionPool.CleanupCallback(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,Boolean preserveSyncCtx) at System.Threading.TimerQueueTimer.CallCallback() at System.Threading.TimerQueueTimer.Fire() at System.Threading.TimerQueue.FireNextTimers()
在这方面的任何帮助将不胜感激.