以前は常に機能していた非常に単純なサービスがありますが、新しい .NET バージョンにアップグレードしたところ、次のようなエラー メッセージが表示されて機能しなくなりました。
タイムアウトになりました。プールから接続を取得する前に、タイムアウト期間が経過しました。これは、プールされたすべての接続が使用中で、最大プール サイズに達したために発生した可能性があります。
サービスが実行しようとするストアド プロシージャを実行しようとしましたが、ms sql server management studio で直接実行すると 1 秒もかからないので、何が問題なのかわかりません。同じデータベース (同じストアド プロシージャではありません) を使用するクライアントは、同時に使用してもタイムアウトの問題はありません。
コードが表示されるように編集します。
これは、サービスの開始時に呼び出されます。
Private Sub SetupGetBatch1Command()
GetBatch1Command = New System.Data.SqlClient.SqlCommand("spgetTheData1")
GetBatch1Command.CommandType = Data.CommandType.StoredProcedure
End Sub
そして、これは時間間隔で:
Private Function GetBatch1() As DataSet
Dim dataset As New DataSet
Dim adapter As Data.SqlClient.SqlDataAdapter
Dim cn As New System.Data.SqlClient.SqlConnection(connectionstring())
GetBatch1Command.Connection = cn
adapter = New Data.SqlClient.SqlDataAdapter(GetBatch1Command)
adapter.Fill(dataset)
Return dataset
End Function
私はこれを行ったことがなく、それについてあまり知りませんが、少なくとも以下のアドバイスに従って、どこかに cn.dispose() を追加する必要があると思いますか?
他にも同様のデータベース接続があり、すべて上記の例とまったく同じ方法で行われます。