C# 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

尽管我正在创建WebClient的新实例,并遵循标准过程确保WebClient被GC删除,但这并不重要:WebClient从我的服务器检索它以前检索到的内容,只有重新启动应用程序,它才允许从我的服务器检索新内容。内容是一个简单的文本文件字符串,没有花哨的缓存,因为它可以在WinRT上正常工作

这是一个谜,因为我正试图制作一个聊天室;我需要刷新以获得新内容,但WebClient会返回它第一次检索到的内容

我的代码:

    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
谢谢!这就是解决办法!将此添加到答案中。