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

时间:2015-06-05 10:49:22

标签: c# asp.net-web-api asp.net-web-api2

对于我正在进行的项目,我必须在c#asp.net web api中创建一个Web服务2.现在,我有一个基本的Web服务,当客户端调用该服务时,它返回json 。这就是我所拥有的:

ProductController的

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

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

1 个答案:

答案 0 :(得分:0)

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

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