我正在使用 HttpClient 与 Web 服务进行通信以进行发送/接收(JSON 格式的响应)。但我在接收数据时遇到一些问题。我每 5 分钟调用一次 Web 服务,使用 HttpClient 刷新 Windows Phone 上的内容,但响应一次又一次相同。为了获得新的响应,我需要退出应用程序并再次调用服务。 HttpClient是否需要一些刷新或清除数据的过程?我是否需要实施其他方法才能每次都获得新的刷新结果?
请建议。下面是我的实现
public async Task<string> GetMyData(string urlToCall)
{
try
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.Timeout = TimeSpan.FromMilliseconds(double.Parse(30000));
HttpRequestMessage request = new HttpRequestMessage(System.Net.Http.HttpMethod.Get, urlToCall);
var response = await httpClient.SendAsync(request);
if (response.StatusCode == HttpStatusCode.OK)
{
var responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
else
{
return string.Empty;
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Exception => RestfulWebService =>GetMyData: " + ex.Message);
return string.Empty;
}
}
Windows Phone(与 Windows 应用商店应用程序不同)具有减少对服务器的调用次数的优化。
因此,默认情况下,Phone 中的 get 请求(或 GetAsync)的 SendAsync 的实现方式是,如果您再次发出相同的 get 请求调用,它甚至不会命中服务器,而是直接返回之前为您获取的结果。
如果您想手动覆盖此优化,则必须手动将标头“IfModifiedSince”添加到请求中并将日期时间偏移设置为现在。这将使客户端每次都重新调用服务器。
这是代码
HttpRequestMessage request = new HttpRequestMessage(System.Net.Http.HttpMethod.Get, urlToCall);
request.Headers.IfModifiedSince = new DateTimeOffset(DateTime.Now);
var response = await httpClient.SendAsync(request);
请注意,在创建请求之后并将其发送到服务器之前,我在代码中间添加了一行。
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)