C# WebClient和任务未检索新内容,但新内容可用吗?
尽管我正在创建WebClient的新实例,并遵循标准过程确保WebClient被GC删除,但这并不重要:WebClient从我的服务器检索它以前检索到的内容,只有重新启动应用程序,它才允许从我的服务器检索新内容。内容是一个简单的文本文件字符串,没有花哨的缓存,因为它可以在WinRT上正常工作 这是一个谜,因为我正试图制作一个聊天室;我需要刷新以获得新内容,但WebClient会返回它第一次检索到的内容 我的代码:C# WebClient和任务未检索新内容,但新内容可用吗?,c#,windows-phone-8,windows-phone,C#,Windows Phone 8,Windows Phone,尽管我正在创建WebClient的新实例,并遵循标准过程确保WebClient被GC删除,但这并不重要:WebClient从我的服务器检索它以前检索到的内容,只有重新启动应用程序,它才允许从我的服务器检索新内容。内容是一个简单的文本文件字符串,没有花哨的缓存,因为它可以在WinRT上正常工作 这是一个谜,因为我正试图制作一个聊天室;我需要刷新以获得新内容,但WebClient会返回它第一次检索到的内容 我的代码: public async Task<string> Retri
public async Task<string> RetrieveDocURL(Uri uri)
{
return await DownloadStringTask(new WebClient(), uri);
}
/*
public async Task<byte[]> RetrieveImageURL(string url)
{
return await _webClient.GetByteArrayAsync(url);
}
* */
private Task<string> DownloadStringTask(WebClient client, Uri uri)
{
var tcs = new TaskCompletionSource<string>();
client.DownloadStringCompleted += (o, e) =>
{
if (e.Error != null)
tcs.SetException(e.Error);
else
tcs.SetResult(e.Result);
};
client.DownloadStringAsync(uri);
return tcs.Task;
}
公共异步任务RetrieveDocURL(Uri)
{
返回等待下载StringTask(新WebClient(),uri);
}
/*
公共异步任务检索图像url(字符串url)
{
return wait_webClient.GetByteArrayAsync(url);
}
* */
私有任务下载StringTask(WebClient客户端,Uri)
{
var tcs=new TaskCompletionSource();
client.DownloadStringCompleted+=(o,e)=>
{
如果(例如错误!=null)
设置异常(例如错误);
其他的
tcs.SetResult(e.Result);
};
client.DownloadStringAsync(uri);
返回tcs.Task;
}
WebClient的缓存策略非常激进。如果每次查询同一个URL,则应该考虑在末尾添加一个随机参数。比如:
"http://www.yourserver.com/yourService/?nocache=" + DateTime.UtcNow.Ticks
WebClient的缓存策略非常具有攻击性。如果每次查询同一个URL,则应该考虑在末尾添加一个随机参数。类似于
”的东西http://www.yourserver.com/yourService/?nocache=“+DateTime.UtcNow.Ticks
谢谢!这就是解决办法!将此添加到答案中。