Fáb*_*nes 28 c# caching webclient
美好的一天.
我WebClient
在我的C#应用程序中使用该类以便每分钟下载相同的文件,然后应用程序执行简单的检查以查看文件是否已更改,以及它是否确实对其执行了操作.
好吧,因为这个文件每分钟下载一次,WebClient
缓存系统都会缓存文件,而不是再次下载文件,只是简单地从缓存中获取文件,这样就会检查下载的文件是否是新文件.
所以我想知道如何禁用WebClient
该类的缓存系统.
我试过了.
Client.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.BypassCache);
Run Code Online (Sandbox Code Playgroud)
我也试过标题.
WebClient.Headers.Add("Cache-Control", "no-cache");
Run Code Online (Sandbox Code Playgroud)
没有工作.那我怎么能禁用缓存呢?
谢谢.
编辑
我也试过以下CacheLevels
:NoCacheNoStore
,BypassCache
,Reload
.没有效果,但是如果我重新启动计算机,缓存似乎被清除,但我不能每次都重新启动计算机.
面对最近的活动更新(8集2012)
标记为已接受的答案解决了我的问题.简单来说,我使用套接字下载文件,这解决了我的问题.基本上是对所需文件的GET请求,我不会详细介绍如何操作,因为我确信你可以在SO上找到大量的"如何",以便自己做同样的事情.虽然这并不意味着我的解决方案对你来说也是最好的,但我的第一个建议是阅读其他答案,看看是否有用.
好吧无论如何,因为这个问题已经看到了最近的一些活动,我想添加这个更新,以包括一些暗示或想法,我认为应该考虑那些面临类似问题的人,他们尝试了他们可以想到的一切,并且确定问题没有撒谎他们的代码.可能是大多数情况下的代码,但有时候我们只是不太看到它,只需要散步几分钟后再回来,你可能会看到它是空白范围,就像它是最明显的一样.第一名.
无论哪种方式,如果您确定,那么在这种情况下,我建议检查天气您的请求通过其他具有缓存功能的设备(计算机,路由器,代理,...),直到它到达预定目的地.
考虑到大多数请求都通过之前提到的一些此类设备,更常见的是路由器,除非您通过服务提供商网络直接连接到Internet.
有一段时间我自己的路由器正在缓存文件,奇怪我知道,但事实就是如此,每当我重新启动它或直接连接到Internet时,我的缓存问题就消失了.并且没有任何其他设备连接到路由器可以被指责,只有计算机和路由器.
顺便说一句,一般建议,虽然它主要适用于那些在公司开发计算机而不是自己的计算机上工作的人.可以通过任何更改您的开发计算机运行各种缓存服务?有可能的.
此外,考虑到许多高端网站或服务使用内容交付网络(CDN),并且根据CDN提供商,无论何时更新或更改文件,这些更改都需要一些时间才能反映在整个网络中.因此,您可能有可能要求提供可能处于更新中间的文件,并且最近的CDN服务器尚未完成更新.
在任何情况下,特别是如果您总是一遍又一遍地请求相同的文件,或者如果您找不到问题所在,那么如果可能的话,我建议您重新考虑一次又一次请求同一文件的方法,并且而是考虑构建一个简单的Web服务,以满足您首先考虑满足此类文件的需求.
如果您正在考虑这样的选项,我想您可能会更容易根据自己的需要构建REST样式Web API.
我希望这个更新在某种程度上对你有用,肯定会在我回来的时候.祝您的编码工作顺利.
Vin*_*B R 28
每次下载文件时,您都可以尝试将一些随机数附加到您的网址,作为查询字符串的一部分.这确保了每次都是唯一的URL.
对于前
Random random = new Random();
string url = originalUrl + "?random=" + random.Next().ToString();
webclient.DownloadFile(url, downloadedfileurl);
Run Code Online (Sandbox Code Playgroud)
Dan*_*dor 12
从上面我猜想你在其他地方有问题.你能在服务器端记录http请求吗?当你改变一些随机种子参数时你会得到什么?
也许SERVER缓存文件(如果日志显示请求确实是每分钟触发一次.
你使用ISA还是SQUID?
什么是您的请求的http响应代码?
我知道回答答案可能不受欢迎,但评论不允许我这么多文字:)
编辑:
无论如何,使用HttpRequest
对象代替WebClient
,并希望(如果你怀疑WebClient
),一切都将得到解决.如果它没有解决HttpRequest
,那么问题确实在其他地方.
进一步完善:
这是纯粹的套接字,如果问题仍然存在,那么打开一个新问题并标记为WTF :)
KMå*_*Mån 10
永远不会通过使用缓存中的资源来满足请求,也不会缓存资源.如果资源存在于本地缓存中,则会将其删除.此策略级别向中间缓存指示应删除资源.在HTTP缓存协议中,这是使用no-cache缓存控制指令实现的.
client.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
Run Code Online (Sandbox Code Playgroud)
在某些情况下,网络调试软件可能会导致此问题.要确保您的网址没有被缓存,您可以附加一个随机数作为最后一个参数,以使网址唯一.在大多数情况下,这个随机参数被服务器忽略(它尝试读取作为名称值对发送的参数).
示例:http: //www.someserver.com/?param1 = val1&ThishissandandRandom = RandomValue
其中ThisIsRandom = RandomValue是添加的新参数.
归档时间: |
|
查看次数: |
48740 次 |
最近记录: |