XE5 RestClient库问题

时间:2013-12-05 09:44:33

标签: delphi rest delphi-xe5

我创建了一个FMX Windows应用程序,它连接到Web服务器以获取REST数据。我一直在使用REST客户端,响应,请求和ResponseDataAdapter,并将其连接到客户端数据集。然后我通过实时绑定将数据集连接到字符串网格。我已经为2个不同的字符串网格做了这个,没有任何问题,然后我来到我想做的最后一个请求,我得到一些非常奇怪的行为。我在数据模块中设置了所有内容,并在IDE中执行了RestRequest,并获得了我在RESTResponse中预期的内容。然后我激活了RESTResponseAdapter和ClientDataset。填充了clientdata集,我只需要添加字段就可以通过ide添加fielddef。

我在应用程序上设置了计时器以更新字符串网格等,对两个字符串网格工作正常。但是在最后一个上,我在StringGrid上得到的是我最初在IDE中获取的数据。我假设这可能是由于clientdataset上的一些缓存,所以我在表单上放了一个备忘录,并在每次请求执行后我将响应内容发布到备忘录....奇怪的是我偶尔得到响应服务器是目前发回(通过Chrome访问网络服务器验证),但有时响应内容是我在IDE中设置时最初请求的数据。所以我回到IDE并清除了Rest Response的响应数据。再次尝试并得到相同的...我有时得到预期的结果,有时我得到我昨天在IDE中最初得到的响应。所以我想也许网络服务器正在把它发回去。因此,通过网络服务器运行相同的REST请求,永远不会收回restresponse显示的数据......

以下代码触发我的计时器。前两组代码工作正常,最后一组是有缺陷的代码。

  restDataModule.adapterOperators.ClearDataSet;
  restDataModule.cdsOperators.Close;
  restDataModule.responseOperators.Content.Empty;
  restDataModule.reqOnlineOperators.ClearBody;
  restDataModule.reqOnlineOperators.Execute;
  restDataModule.cdsOperators.Open;

  restDataModule.adapterStats.ClearDataSet;
  restDataModule.cdsStats.Close;
  restDataModule.responseOperatorStats.Content.Empty;
  restDataModule.reqOperatorStats.ClearBody;
  restDataModule.reqOperatorStats.Execute;
  restDataModule.cdsStats.Open;

  try
  restDataModule.adapterChats.ClearDataSet;
  restDataModule.cdsChats.Close;
  restDataModule.responseChats.Content.Empty;
  restDataModule.reqChats.ClearBody;
  restDataModule.reqChats.Execute;
  restDataModule.cdsChats.Open;
  except on E: Exception do
    // ignore
    memo1.Lines.Add('Failed!')
  end;
  memo1.Lines.Add(restDataModule.responseChats.Content);

欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

好的解决方法是使用以下设置将参数添加到RestClient: - Kind = pkHTTPHEADER Name = Cache-Control 值=无缓存

简单但难以捉摸