【问题标题】:Content webservice call not refreshed in windows phoneWindows Phone 中未刷新内容 Web 服务调用
【发布时间】:2014-08-13 10:06:50
【问题描述】:

目前,我正在开发一个在地图上显示大约 100 个 GPS 位置的 Windows Phone 8.0 应用程序。 GPS数据通过调用RESTful webservice获取,如下:

public async Task<string> GetWebContent(string uri)
{
   string result = null;
   using (var client = new HttpClient())
   {
      result = await client.GetStringAsync(new Uri(uri));        
   }

   return result;
}

这里,HttpClient 取自 Nuget 包“Microsoft HTTP 客户端库”。

第一次调用代码时,会获取数据,并且 GPS 位置会很好地绘制在地图上。但是,由于 GPS 设备不断移动,我必须每 30 秒刷新一次数据。这就是我碰壁的地方;变量“结果”中包含的数据永远不会改变。即使在几分钟后,数据也是一样的。原始数据包含一个 datetime 属性,它清楚地告诉我数据是旧的,而不仅仅是静止不动的 GPS 设备。如果我将 uri 粘贴到网络浏览器中,并每 15 秒点击一次刷新按钮,则数据确实发生了变化,因此网络服务正常工作。

由于 HttpClient 包含在 using 语句中,因此每次都会将其释放,并且某些隐藏的缓存机制似乎是不可能的。那么,有人有想法吗?

干杯

更新

我尝试使用 Fiddler,但必须遵循冗长​​的说明才能使其与模拟器连接。完成后,就没有任何效果了:-s 将 Fiddler 安装的所有证书恢复并将代码复制到常规 WPF 应用程序中,这也是一种魅力。我对正在发生的事情没有更深入的了解,但问题似乎与它是一个 windows phone 项目有关。

【问题讨论】:

  • 你有没有通过 burp/fiddler 运行这个应用程序,看看它是否会发出这些额外的调用?另外,您如何每 15 秒调用一次此方法?
  • @zaitsman 从来没有听说过打嗝,但我试过 fiddler。那里一定有一些我错过的设置,因为它根本没有显示任何到 WP8 应用程序的流量(甚至不是获取数据的第一个调用)。我正在从 DispatcherTimer 调用发布的方法。

标签: c# web-services rest windows-phone-8


【解决方案1】:

它可能会缓存第一次调用的结果。您可能需要在每次后续调用之前在请求标头中设置 IfModifiedSince 属性,以确保其获取最新值。

示例代码来自:https://stackoverflow.com/a/17884734/61226

client.DefaultRequestHeaders.IfModifiedSince = DateTime.UtcNow;

在此处查看类似问题:

【讨论】:

  • 我不知道 HttpClient 会自动将结果缓存在 windows phone 上。在常规的 WPF 项目中,没有这样的自动缓存。我还发现以下 YouTube 视频很有帮助:youtube.com/watch?v=HOo1vuAXuN4
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多