セットアップ
SQL Server 2008 データベースからデータを取得する Web アプリ経由でアクセスされる .net mvc 4 Web API サービス レイヤーがあります。
問題
Web サービスに対して同時に 5 つを超える GET 要求が行われると、a500 Interal Server Error
が Web アプリに返されます。.net エラーをよく見ると、次のように表示されます。
エラーが発生しました。
接続は閉じられませんでした。接続の現在の状態はオープンです
例外がスローされている C# サービス コード:
public class ImageLinkRepository : IImageLinkRepository
{
private SqlConnection cnnSQL = new SqlConnection(...);
public IEnumerable<ImageLink> Get(String userId)
{
ImageLinks = new List<ImageLink>();
// open connection to DB
cnnSQL.Open();
try
{
SqlCommand cmmSQL = new SqlCommand("nVision_select_lcimagelinks_sp", cnnSQL);
cmmSQL.CommandType = System.Data.CommandType.StoredProcedure;
SqlParameter prmSQL = cmmSQL.Parameters.Add(new SqlParameter
{
ParameterName = "@LCIMGLINKUSERID",
Value = userId
});
SqlDataReader rdrSQL = cmmSQL.ExecuteReader();
if (rdrSQL.HasRows)
{
while (rdrSQL.Read())
{
ImageLinks.Add(new ImageLink
{
// set new ImageLink object's properties
imageTopicId = DBReader.SQLString(rdrSQL, "LCIMGLINKIMGTOPICID"),
id = DBReader.SQLInt(rdrSQL, "LCIMGLINKPK"),
recordId = DBReader.SQLString(rdrSQL, "LCIMGLINKRECORDID"),
text = DBReader.SQLString(rdrSQL, "LCIMGLINKTEXT"),
topicId = DBReader.SQLString(rdrSQL, "LCIMGLINKTOPICID"),
topicItem = DBReader.SQLString(rdrSQL, "LCIMGLINKTOPICITEM"),
url = DBReader.SQLString(rdrSQL, "LCIMGLINKURL"),
user = DBReader.SQLString(rdrSQL, "LCIMGLINKUSERID")
});
}
}
}
// close connection to DB
cnnSQL.Close();
return ImageLinks;
}
}
接続が開いている場合は手動で接続を閉じようとしましたが、接続が閉じている場合のみ接続を開こうとしましたが、どちらも機能しません。
私は何か間違ったことをしているに違いありません。確かに、サービスは同時リクエストを処理できるはずです。私は何が欠けていますか?