0

セットアップ

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;
    }



}

}

繰り返しになりますが、複数のリクエストが同時にサービスにヒットした場合、重複したレコードが返されたり、別のサービス コールに属するレコードが表示されることがあります。

サービスが特定のリクエストのデータのみを返すようにします。誰が何が間違っているのか知っていますか???

4

1 に答える 1