你好。
我在我的C#应用程序中使用WebClient
类,每分钟下载同一个文件,然后应用程序执行简单的检查以查看文件是否已更改,如果确实有更改,则对其进行某些操作。
由于这个文件每分钟都会被下载,所以WebClient
缓存系统会缓存该文件,而不是再次下载该文件,只是从缓存中获取,这妨碍了检查是否下载的文件是新文件。
因此,我想知道如何禁用WebClient
类的缓存系统。
我尝试过。
Client.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.BypassCache);
我也尝试了标题。
WebClient.Headers.Add("Cache-Control", "no-cache");
没有起作用。那么我该如何彻底禁用缓存?
谢谢。
编辑
我还尝试了以下 CacheLevels
: NoCacheNoStore
, BypassCache
, Reload
,但没有效果。然而,如果我重新启动电脑,缓存似乎被清除了,但我不能每次都重新启动电脑。
最近的活动更新(2012年9月8日)
被标记为已解决的answer解决了我的问题。简单来说,我使用套接字下载文件解决了我的问题。基本上是对所需文件的GET请求,我不会详细解释如何做到这一点,因为我相信你可以在SO上找到很多“how to”来自己做同样的事情。虽然这并不意味着我的解决方案也适用于你,我的第一个建议是阅读其他答案,看看是否有任何有用的内容。
无论如何,既然这个问题最近有些活跃,我想添加这个更新,包括我认为应该考虑的一些提示或想法,这些提示或想法应该被那些尝试过所有他们能想到的方法,并且确定问题不在他们的代码中的人考虑。 对于大多数情况来说,可能是代码的问题,但有时我们只是没有看到它,走一走,几分钟后回来,你可能会像显而易见的事情一样看到它。
无论如何,如果你确定了,那么我建议检查一下你的请求是否通过具有缓存功能的其他设备(计算机、路由器、代理等)直到它到达预定目的地。请注意,大多数请求都经过之前提到的一些设备,更常见的是路由器,除非当然,你通过服务提供商网络直接连接到互联网。
曾经我的路由器缓存了文件,很奇怪,但事实就是这样,每当我重新启动它或直接连接到互联网时,我的缓存问题就消失了。而且没有其他设备连接到路由器可以受到指责,只有计算机和路由器。
顺便说一下,一个普遍的建议,尽管它大多适用于那些在公司开发计算机而不是自己的计算机上工作的人。你的开发计算机可能会运行某种缓存服务吗?这是可能的。
此外,请考虑许多高端网站或服务使用内容传送网络(CDN),并且根据CDN提供商的不同,每当文件更新或更改时,这些更改需要一些时间才能反映在整个网络中。因此,你可能在请求正在更新的文件时运气不好,并且最近的CDN服务器尚未完成更新。
无论如何,特别是如果你一遍又一遍地请求相同的文件,或者如果你找不到问题所在,那么如果可能的话,我建议你重新考虑一下自己的方法,不要一次又一次地请求相同的文件,而是寻求构建一个简单的Web Service来满足你最初想要用这个文件满足的需求。
如果你正在考虑这样的选项,我认为你可能会更容易地为自己的需求构建一个REST风格的Web API。
希望这个更新对你有所帮助,对我来说肯定会有帮助。祝你编码愉快。