セットアップ
IIS 7.5 でホストされている Web アプリがあり、.net Web API REST サービスを使用して SQL Server 2008 データベースをショート ポーリングします。サービス コントローラーは、ストアド プロシージャを呼び出してデータを読み取ります。
問題
同じ Web サービスに対して同時要求が行われると、重複した結果が断続的に表示され、他のプロセスの結果がブラウザーに返されることがあります。
C# サービス コード
namespace ImageApp_REST_Services.Repositories {
public class ImageLinkRepository : IImageLinkRepository
{
private List<ImageLink> ImageLinks
{
get;
set;
}
public IEnumerable<ImageLink> Get(String userId)
{
ImageLinks = new List<ImageLink>();
using (var cnnSQL = new SqlConnection(...))
{
// opend 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")
});
}
}
}
catch (Exception)
{
}
}
return ImageLinks;
}
}
}
繰り返しになりますが、複数のリクエストが同時にサービスにヒットした場合、重複したレコードが返されたり、別のサービス コールに属するレコードが表示されることがあります。
サービスが特定のリクエストのデータのみを返すようにします。誰が何が間違っているのか知っていますか???