设置
我们有一个托管在 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;
}
}
}
同样,当多个请求同时访问服务时,我们偶尔会看到返回的重复记录或属于另一个服务调用的记录。
我们希望服务只返回给定请求的数据。有谁知道怎么回事???