タスクを実行する前にユーザーが特定の役割に属していることを確認するページがあり、機能に問題はなく、問題のコードに関連する明らかな変更を加えていません。このサイトは、開発マシン(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、Object owningObject)+163 System.Data.ProviderBase.DbConnectionInternal.CloseConnection(DbConnection owningObject、DbConnectionFactory connectionFactory)+117システム.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
この問題は、WindowsタスクバーでASP.NET開発サーバーを再起動することで修正されました。
または、「Pooling = False;」を追加して永続的に接続文字列に問題を解決する必要があります。
私はそれが投稿されたことを知っていますが、ここに私がそれを手に入れた方法とそれを解決したものがあります。
私がしたこと SQL呼び出しを行うコードセグメントの近くにブレークポイントを置きます。
それが解決したこと WindowsシステムトレイでASP.NET開発サーバーを再起動する(右下隅の時計の横)
私も時々それを取得しています。
私の場合、ページの実行中にデバッガーを停止していたために発生したので、おそらくdb接続プールが台無しになったと思います。
ここでこれについて議論する長いスレッドがあります。 http://social.msdn.Microsoft.com/forums/en-US/adodotnetdataproviders/thread/b5b7a179-3737-4380-b6cf-843f3e71b317/
さまざまなユーザーが同じことを報告しています。明確な結論はありません。マイクロソフトは、アプリケーションがすべきではないハンドルを閉じていると感じているようです。ただし、このアプリでは、少なくともCloseHandle呼び出しはありません。
これがdb接続プーリングの真のバグである場合、これはすべてのasp.netウェブサイトを実行するものであるため、ずっと前に見つかると思っていたでしょう...
これは、SQL呼び出しを行っている行にブレークポイントを挿入したときに起こりました。
ブレークポイントを後で(SQL呼び出しではなく)配置すると、問題は解決しました。
Visual Studioを再起動すると解決しました。ページの読み込み中にデバッガーを停止しました。
WindowsタスクバーでASP.NET Cassiniを再起動すると、これが修正されました。
今朝、他のすべてのビルドでこのエラーが発生し始めました。 Development LocalHostサーバーの再起動は非常に退屈になり始めたので、掘り始めました。端的に言えば、SqlConnection
/SqlCommand
ペアが破棄されることはなく、コードをリファクタリングして例外を停止しました。
IISローカルで実行しているときに同じことを得ました。サイトの起動時にデバッガーを停止したためと思われます。「iisreset」を実行すると修正されました。