2014-07-08 33 views
4

我正在使用HttpClient與Web服務進行通信以進行發送/接收(JSON格式的響應)。但是我在接收數據時遇到了一些問題。我每5分鐘撥打一次網絡服務,使用HttpClient在我的Windows手機上刷新內容,但響應一次又一次。爲了獲得新的回覆,我需要退出應用程序並再次致電服務。 HttpClient是否需要刷新或清除數據過程?我是否需要實施其他一些措施才能每次獲得新的刷新結果? 請建議。下面是我的實現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; 
     } 
    } 
+0

也許這是幫忙嗎? http://stackoverflow.com/questions/21620853/why-does-the-httpclient-always-give-me-the-same-response/21624609#21624609 –

回答

7

Windows Phone(與Windows應用商店應用不同)具有優化功能,可以減少對服務器的呼叫次數。

因此,默認情況下,SendAsync用於Phone中的get請求(或GetAsync)是以這樣的方式實現的:如果您再次進行相同的get請求調用,它甚至不會直接返回到服務器,而是直接返回以前的結果它爲你獲取。

如果要手動覆蓋此優化,請手動將頭「IfModifiedSince」添加到請求中,並將datetimeoffset設置爲現在。這將使客戶端每次再次調用服務器。

下面的代碼,我已經加在你的代碼的中間一行,創建請求後,並將其發送給服務器之前

 HttpRequestMessage request = new HttpRequestMessage(System.Net.Http.HttpMethod.Get, urlToCall); 
     request.Headers.IfModifiedSince = new DateTimeOffset(DateTime.Now); 
     var response = await httpClient.SendAsync(request); 

通知。

希望它有幫助。

1

試試下面的代碼請求

request.Headers.Add("If-Modified-Since", DateTime.Now.ToString()); 

0

DateTime d = DateTime.Now.AddDays(-1); string date = d.ToUniversalTime()。ToString(「r」); client.DefaultRequestHeaders.Add(「If-Modified-Since」,date);