2015-06-05 126 views
0

对于我正在开发的项目,我必须在c#asp.net web api 2中创建一个Web服务。现在,我有一个基本的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; 
     } 
    } 

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

+0

其相当简单。我的意思是,为什么你需要检查客户是否收到数据?他们将在您执行getDataRows()调用时收到它。如果他们没有,那么它可能会是一些http协议级别的错误(或者从你的代码抛出的异常)。在返回它之前,您需要有一些逻辑来查看它已发送,并且不要将它包含在下一个请求中。或者,客户可能希望发回先前请求的响应代码,但您需要通过发送一些令牌来唯一标识客户端/呼叫来追踪此响应代码。 –

+2

@ kwv84这是通过请求 - 回复模式的客户端 - 服务器通信。在Web API中,如果数据到达客户端,则无法在服务器站点检查。在这里,您可以从客户端的第一个ajax请求到服务器的成功操作再次发出ajax调用。 –

+0

我编辑过你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

回答

0

我不知道你的意思是通过更新服务器端的状态。看起来您只需要在下一次调用服务时向客户端发送新产品(无论如何)。这违反了Web API的无状态模式。有关状态服务的更多信息,并TTO看你如何能做到这一点,为什么你不应该这样做,看到这个SO Q &为:Can we make Restful webservice stateful?ASP.NET Web API session or something?

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

+0

@JoteBe问题是客户可以拥有产品(产品代码是唯一的),但产品中的某些内容会在服务器上发生变化(价格,描述等)。现在,为了不暴露所有产品,我想,我只让服务器提供状态修改== true的产品。现在,当客户端进行调用并且一切顺利时,服务器不知道客户端已经将数据写入了它自己的数据库中。所以我想,如果客户端告诉服务器它已经写了修改过的项目,那么我可以改变服务器上的修改状态。 – kwv84

+0

客户端可以向服务器发出API调用通知它他已经收到并更新了数据。有什么问题不这样做? – JotaBe

+0

@JoteBe我对Web Api很新,所以我试着去理解。客户端(这是一个PHP应用程序btw)拨打电话并获取产品。在我的控制器中,我有另一个功能。因此,客户端会对该功能进行新的调用,并发送已更新的产品ID。然后,web api函数接收该id并更新数据库并报告成功。 – kwv84

相关问题