Добрый день.
Я использую класс 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
. Никакого эффекта, однако, если я перезагружу компьютер, кеш, похоже, будет очищен, но я не могу перезагружать компьютер каждый раз.
UPDATE перед недавней активностью (8 Set 2012)
ответ, отмеченный как принятый, решил мою проблему. Проще говоря, я использовал Сокеты для загрузки файла, и это решило мою проблему. В основном GET запрос на нужный файл, я не буду вдаваться в подробности о том, как это сделать, потому что я уверен, что вы можете найти множество "как" прямо здесь, на SO в чтобы сделать то же самое. Хотя это не означает, что мое решение также является лучшим для вас, мой первый совет - прочитать другие ответы и посмотреть, полезны ли они.
Ну, так или иначе, так как эти вопросы видели некоторые недавние действия, я подумал о добавлении этого обновления, чтобы включить некоторые подсказки или идеи, которые, как я думаю, должны рассматриваться теми, кто сталкивается с аналогичными проблемами, которые пытались все, что они могли придумать, и уверены, что проблема не лежит с их кодом. Скорее всего, это код для большинства случаев, но иногда мы просто не совсем это видим, просто пойдите, прогуляйтесь и вернитесь через несколько минут, и вы, вероятно, увидите, что это точка пустого диапазона, как это было наиболее очевидная вещь в первую очередь.
В любом случае, если вы уверены, тогда в этом случае я советую проверять погоду, ваш запрос проходит через какое-то другое устройство с возможностями кэширования (компьютеры, маршрутизаторы, прокси,...), пока не дойдет до намеченного адресата.
Считайте, что большинство запросов проходят через некоторые из таких устройств, упомянутых ранее, более обычно маршрутизаторы, если, конечно, вы напрямую не подключены к Интернет через поставщика услуг сеть.
В свое время мой собственный маршрутизатор кэшировал файл, что я знаю, но это было так, когда я перезагружал его или напрямую подключался к Интернету, проблема с кэшированием исчезла. И нет никакого другого устройства, подключенного к маршрутизатору, который может быть обвинен, только компьютер и маршрутизатор.
И, кстати, общий совет, хотя он в основном относится к тем, кто работает на своих компьютерах разработки компании, а не их собственных. Можете ли какие-либо изменения на вашем компьютере разработки запустить кеширование? Это возможно.
Кроме того, считайте, что многие веб-сайты или службы высокого уровня используют Content Сети доставки (CDN), и в зависимости от поставщика CDN, всякий раз, когда файл обновляется или изменяется, требуется некоторое время для изменения для отражения во всей сети. Поэтому это может быть возможно, вам не повезло просить файл, который может быть в середине обновления, и ближайший сервер CDN для вас не закончил обновление.
В любом случае, особенно если вы всегда запрашиваете один и тот же файл много раз, или если вы не можете найти, где проблема, тогда, если это возможно, я советую вам пересмотреть свой подход запрашивая один и тот же файл за раз, и вместо этого загляните в создание простой веб-службы, чтобы удовлетворить потребности, которые вы сначала подумали о удовлетворении с помощью таких файл в первую очередь.
И если вы рассматриваете такой вариант, я думаю, вам, вероятно, будет легче создать REST Стиль Web API для ваших нужд.
Я надеюсь, что это обновление будет вам каким-то полезным, конечно, это будет для меня, пока я вернусь. Удачи вам в ваших усилиях по кодированию.