在windows app 8.1 c#中,webservice总是得到相同的结果

本文关键字:结果 webservice app windows | 更新日期: 2023-09-27 18:09:59

我正在开发windows应用程序8.1通知c#,我已经编写了一个异步方法。我还为async方法创建了调度器,它每隔5秒调用一次这个方法。

我的问题是我总是得到旧记录,即使我的web服务返回新记录。如果我关闭应用程序并重新启动,那么我就可以看到最新的记录。

我的Webservice方法返回json数据。

private int timesTicked = 1;
private int timesToTick = 10;
public NotificationPage()
{
    InitializeComponent();
    // this._channelUri = LocalSettingsLoad(ApplicationData.Current.LocalSettings, ChannelUriKey, ChannelUriDefault);
    Task<string> getURi = UpdateChannelUri();
    DispatcherTimer timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(1000) };
    timer.Tick += (s, e) =>
    {
        getNotificationFrom_Api();
    };
    timer.Start();
}
private async void getNotificationFrom_Api()
{
    try
    {
        string uri = "http://abc/service1.svc/GetNotificationList"; //testing purpose
        HttpClient http = new System.Net.Http.HttpClient();
        HttpResponseMessage response = await http.GetAsync(uri);
        var webresponse = response.Content.ReadAsStringAsync().Result;

        var emp = JsonConvert.DeserializeObject<ClNotification>(webresponse);
        ListBox1.ItemsSource = emp.GetNotificationlistResult.ToList();
    }
    catch (Exception rt)
    {
    }
}

在windows app 8.1 c#中,webservice总是得到相同的结果

首先,如果你在ASP中做。result通常是一个坏主意,因为你有获得线程死锁的风险:http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

所以我也要改变这一行:

  var webresponse = await response.Content.ReadAsStringAsync();

如果它是一个HTTP GET,它可能是结果被缓存在代理或您的浏览器。为了防止这种情况,你可以设置HTTP头来防止缓存:http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/

如果有人在同一条船上,请在下面加上:

HttpClient http = new System.Net.Http.HttpClient();
http.DefaultRequestHeaders.Add("Cache-Control", "no-cache");