一尘不染

C#WebClient禁用缓存

c#

美好的一天。

我正在WebClientC#应用程序中使用该类,以便每分钟下载相同的文件,然后该应用程序执行简单的检查以查看文件是否已更改,以及是否对文件进行了某些操作。

好吧,既然此文件每分钟都下载一次,那么WebClient缓存系统就在缓存文件,而不是再次下载文件,只是从缓存中获取文件,而这会妨碍检查下载的文件是否是新文件。

所以我想知道如何禁用WebClient该类的缓存系统。

我试过了。

Client.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.BypassCache);

我也尝试过标题。

WebClient.Headers.Add("Cache-Control", "no-cache");

效果不佳。那么,如何才能永久禁用缓存?

谢谢。

编辑

我也试过以下CacheLevelsNoCacheNoStoreBypassCacheReload。没有效果,但是,如果我重新启动计算机,缓存似乎已清除,但是我不能每次都重新启动计算机。

面对最近的活动进行更新(2012年第8套)

标记为已接受的答案解决了我的问题。简而言之,我使用套接字下载文件,这解决了我的问题。基本上是对所需文件的GET请求,我不会详细介绍如何执行该操作,因为我确信您可以在SO上找到很多“操作方法”,以便自己进行操作。尽管这并不意味着我的解决方案也是最适合您的,但我的首要建议是阅读其他答案,看看是否有帮助。

好吧,无论如何,由于这个问题最近出现了一些活动,因此我考虑添加此更新,以包括一些提示或想法,我认为那些面临类似问题并尝试了一切可能想到的问题的人应该考虑这些提示或想法,并确保该问题不会发生。说谎与他们的代码。
可能是大多数情况下的代码,但有时我们只是不太了解它,只需走一会儿,几分钟后再回来,您可能会看到它指向空白范围,就像它是最明显的东西。第一名。

无论哪种方式,如果您确定,那么在这种情况下,我建议检查天气,您的请求将通过具有缓存功能的其他设备(计算机,路由器,代理等)到达目标目的地。

考虑到大多数请求都通过前面提到的某些此类设备(更常见的是路由器)进行,除非您通过服务提供商网络直接连接到Internet。

有一次我自己的路由器缓存文件,这很奇怪,但是确实如此,每当我重新启动文件或直接连接到Internet时,我的缓存问题就消失了。而且,没有任何其他设备可以怪罪于路由器,只有计算机和路由器。

顺便说一句,尽管是一般性建议,但它通常适用于在公司开发计算机中工作的人员,而不是自己的人。通过任何更改,您的开发计算机都可以运行各种缓存服务吗?有可能的。

此外,考虑到许多高端网站或服务都使用内容分发网络(CDN),并且取决于CDN提供者,每当文件被更新或更改时,此类更改都需要花费一些时间才能反映在整个网络中。因此,可能是您不幸需要一个可能正在更新中的文件,而距离您最近的CDN服务器尚未完成更新。

无论如何
,特别是如果您总是一遍又一遍地请求同一文件,或者找不到问题所在,那么,如果可能的话,我建议您重新考虑一次又一次地请求同一文件的方法,并且而是着眼于构建一个简单的Web
Service
,以满足您首先想到的满足该文件的需求。

而且,如果您正在考虑使用这种选项,我认为您可能会更轻松地构建满足自己需求的REST样式Web
API

我希望此更新对您有所帮助,确保它对我有用。祝您在编码工作上一切顺利。


阅读 831

收藏
2020-05-19

共1个答案

一尘不染

从上面我猜想你在其他地方有问题。您可以在服务器端记录http请求吗?更改一些随机种子参数会得到什么?

也许SERVER缓存了文件(如果日志显示请求确实每分钟触发一次)。

您使用ISA还是SQUID?

您的请求的http响应代码是什么?

我知道回答答案可能不会流行,但是评论不允许我写这么多文字:)

编辑:

无论如何,请使用HttpRequestobject代替WebClient,并希望(如果您对表示怀疑WebClient)一切都会解决。如果使用无法解决问题HttpRequest,那么问题实际上出在其他地方。

进一步完善:

更进一步:如何在.Net中手动创建HTTP请求?

这是纯套接字,如果问题仍然存在,请打开一个新问题并将其标记为WTF :)

2020-05-19