在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)
{
}
}
首先,如果你在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");