我正在使用HttpClient与Web服务进行通信以进行发送/接收(以JSON格式进行响应)。但我在接收数据时遇到了一些问题。我每5分钟调用一次Web服务,使用HttpClient在我的Windows手机上刷新内容,但响应反复出现。为了获得新的响应,我需要退出应用程序并再次呼叫服务。 HttpClient需要一些刷新或清除数据的过程吗?我是否需要实施其他一些approch来每次获得新的刷新结果? 请建议。以下是我的实施
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;
}
}
答案 0 :(得分:7)
Windows Phone(与Windows应用商店应用程序不同)具有优化功能,可减少对服务器的调用次数。
因此,默认情况下,SendAsync for Phone中的get请求(或GetAsync)实现的方式是,如果再次进行相同的get请求调用,它甚至不会命中服务器但会直接返回之前的结果为你取得的。
如果要手动覆盖此优化,则必须手动将标头“IfModifiedSince”添加到请求中,并将datetimeoffset设置为now。这将使客户端每次都再次调用服务器。
这是代码
HttpRequestMessage request = new HttpRequestMessage(System.Net.Http.HttpMethod.Get, urlToCall);
request.Headers.IfModifiedSince = new DateTimeOffset(DateTime.Now);
var response = await httpClient.SendAsync(request);
请注意,在创建请求之后以及将其发送到服务器之前,我已在代码中间添加了一行。
希望它有所帮助。
答案 1 :(得分:1)
在请求中尝试以下代码
request.Headers.Add("If-Modified-Since", DateTime.Now.ToString());
答案 2 :(得分:0)
DateTime d = DateTime.Now.AddDays(-1); string date = d.ToUniversalTime()。ToString(“r”); client.DefaultRequestHeaders.Add(“If-Modified-Since”,date);