如何检查客户端是否已收到所有数据

How to check if client has received all data

对于我正在进行的项目,我必须在 c# 中创建一个 Web 服务 asp.net web api 2. 现在,我有一个基本的 Web 服务,当客户端将服务称为 returns json。这是我的:

产品控制器

public class ProductController : ApiController
    {
        public List<Dictionary<string, object>> Get()
        {
            ProductRepository er = new ProductRepository();

            return getDataRows(er.getModifiedProducts());

        }


        private List<Dictionary<string, object>> getDataRows(DataTable dt)
        {
            List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
            Dictionary<string, object> row;

            foreach (DataRow dr in dt.Rows)
            {
                row = new Dictionary<string, object>();
                foreach (DataColumn col in dt.Columns)
                {
                    string output = Regex.Replace(Convert.ToString(col.ColumnName), "[.]", "\.");
                    row.Add(output, Convert.ToString(dr[col]));
                }

                rows.Add(row);
            }
            return rows;
        }
    }

当客户端调用该服务时,它会获得所有已修改的产品。当客户端收到所有数据后,我想更新产品状态,以便当客户端进行第二次调用时,不再发送第一次调用的产品。 在服务进行更新之前,它必须确保客户端已经收到完整的数据集。我在想一些带有回调的东西,但我不知道从哪里开始。能给我一些指点吗?

我不知道你所说的在服务器端更新状态是什么意思。看起来您只需要它在下次调用服务时仅向客户端发送新产品(无论这意味着什么)。这违反了 Web API 无状态的常见模式。有关有状态服务的更多信息,以及要了解如何做到以及为什么不应该这样做,请参阅此 SO 问答:Can we make Restful webservice stateful? and ASP.NET Web API session or something?

在每个请求中包含已下载到客户端的产品密钥列表会是一个更好的解决方案,这样服务器就知道哪些不应该在响应中发送。我不知道你的问题的细节,但也许,如果新产品有一个增量 ID、一个更新的日期或类似的东西,你只需要发送一条信息,这样服务器就知道要发送什么客户。