WP7.1应用程序中的WebClient只调用一次

本文关键字:一次 调用 应用程序 WebClient WP7 | 更新日期: 2023-09-27 18:27:34

我的问题是:

我的WebClient使用云中的一个函数(http://127.0.0.1:81/Service1.svc/Data)。

但是不可能多次调用(例如进行更新)。

这是我的代码:

private void button_Click(object sender, RoutedEventArgs e)
{
WebClient cnt = new WebClient();
cnt.DownloadStringCompleted += new DownloadStringCompletedEventHandler(cnt_DownloadStringCompleted);
cnt.DownloadStringAsync(new Uri("http://127.0.0.1:81/Service1.svc/Data"));
}
void cnt_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
int num = JsonHelper.FromJson<int>(e.Result);
textbox.Dispatcher.BeginInvoke(() => textbox.Text = Convert.ToString(num));
}

每次单击后,应用程序在cnt_DownloadStringCompleted中运行良好,但在服务器中更新后,结果(e.result)永远不会更改。

在Azure服务中,我注意到函数(Data)只被调用一次(第一次)。

如何才能多次呼叫我的服务?

WP7.1应用程序中的WebClient只调用一次

检查服务器端以确保不允许缓存。如果您的服务中有响应上下文,请设置:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

或者,如果您没有能力这样做,请在querystring上发送一个不断变化的无意义参数,类似于:

http://127.0.0.1:81/Service1.svc/Data?nonsense=190AF142-4341-47DC-9CF5-3BC3ACBD02EE

您可以每次生成并发送一个新的guid,甚至可以使用DateTime.Now.Ticks.ToString()。话虽如此,如果你可以控制服务器端,就取消缓存,因为这种方式是一种严重的黑客攻击。

我相信网络请求通常是由模拟器缓存的(可能也是真实的手机)。

这里有一些博客文章提到了这一点,以及一些解决方案:

  • http://www.benday.com/2011/10/06/disable-rest-webrequest-url-caching-on-wp7-mango/
  • http://www.nickharris.net/2010/10/windows-phone-7-httpwebrequest-returns-same-response-from-cache/