开发者

Is there any way to force WebClient, not return cached data?

I'm retreiving images from a web server directory like this:

        WebClient webClientImgDownloader = new WebClient();
        webClientImgDownloader.OpenReadCompleted += new OpenReadCompletedEventHandler(webClientImgDownloader_OpenReadCompleted);
        if(uriIndex < uris.Count())
            webClientImgDownloader.OpenReadAsync(new Uri(uris[uriIndex], UriKind.Absolute));

But I've noticed if I remove the image, silverlight continues to retrieve the image开发者_如何学C as if it were there.

When I then type the image URL into FireFox I see the image as well, but then I click Reload and it gives me the appropriate error that the image doesn't exist. Then when I run my silverlight application again, it also appropriately gives me an error that the image doesn't exist as if the browser had cleared a cache flag somewhere.

How can I then do a "refresh" via WebClient in code, so that if an image suddenly doesn't exist on the server, Silverlight doesn't continue to give me a cached copy of it?


This is a tricky one as the caching is usually being caused by the website's headers not specifying a no-cache. I've found that in the past the easiest way to deal with these caching issues is simply to provide a randomised query string parameters so that the web server interprets each request as a fresh request.

if you're currently requesting www.domain.com/image.jpg then try www.domain.com/image.jpg?rand=XXXX where XXXX is a random value generated in your server side code.


You need to decide what you're caching policy is for various content on your site.

If you must make sure that the latest state is presented when ever a request is made ensure that the server configures the response headers appropiately. In this case make sure you have the header Cache-Control: max-age=0 specified on the image (or more likely on the folder holding the set of images).

By setting max-age=0 you will cause the browser to attempt to refetch the image, however it will inform the server about any existing version of the image it has in the cache. This gives the server the opportunity to send status 404 because the image has been deleted, 304 because the image is still there and hasn't changed so the cached version may be used or 200 because the image has changed, this latter response will carry a the new version.


Here is my solution:

return new BitmapImage(new Uri(Mang.Communication.ServicePathUrl + "Icon.aspx?location=" + value.imageParameter + "&originalSize=true" +  "?" +  System.DateTime.Now.ToString(), UriKind.Absolute));
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜