【发布时间】:2015-05-12 20:41:49
【问题描述】:
我正在开发一个 Windows Phone 8 应用程序,它将一些数据发送到执行它并返回结果的服务器。可以随时查询服务器以获取当前执行的状态,可以是初始化、运行或完成。仅当执行处于完成状态时输出才可用。用户可以选择通过按“更新”按钮来检查当前执行状态
XAML
<Button Background="{StaticResource PhoneAccentBrush}"
Click="UpdateRunInfo" > Update info</Button>
这是方法
private async void UpdateRunInfo(object sender, RoutedEventArgs e)
{
ExecutionItem clicked = ((sender as Button).DataContext as ExecutionItem);
HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential("username", "password");
HttpClient client = new HttpClient(handler);
string Url = "http://somefakeurl.com/server/run/id/status";
string _status = await client.GetStringAsync(Url);
clicked.status = _status;
}
所以问题是这个方法只有在第一次被调用时才能正常工作。之后,无论服务器的实际状态如何,GetStringAsync() 都会返回与第一次调用相同的结果。
我在一个单独的 Windows Phone 项目中尝试过这种方法,结果是一样的。 为了确保服务器正常运行,这次我在桌面应用程序上再次尝试了相同的 C# 代码,它运行良好。
我的理论是,因为我多次发送相同的请求,WP OS 正在缓存最后一个结果并将其返回给我,而不是实际向服务器发出 GET 请求。
为什么 HttpClient 返回缓存状态而不是实际从服务器获取状态?
【问题讨论】:
-
尝试设置
client.DefaultRequestHeaders.IfModifiedSince -
服务器是否设置了正确的缓存头?为了避免缓存,只需添加随机查询字符串
?qwerty=123456,通常用于“缓存破坏”人们使用当前时间。 -
LB,它成功了!太感谢了 :) !我自己永远也找不到解决方案。
标签: c# windows-phone-8