XmlTextReader - XML читает старое содержимое после обновления файла
Поэтому я использую " Updater.exe ", который читает файл XML на моем веб-сервере. Программа обновления проверяет, доступна ли новая версия программы, которая передает новый файл (заменяя старый) и запускает его. (Имя файла бредовое, так как я не хочу, чтобы пользователи запускали его напрямую, оно должно проходить через программу обновления (которая запускает его с помощью p.StartInfo.UseShellExecute = false;)).
Я столкнулся с действительно странной "ошибкой" или как мне это назвать.
Допустим, я делаю новую версию через 1 неделю. Я также обновляю информацию о сборке приложения и версию XML-файла. Теперь, когда я запускаю UPDATER.exe, он не видит новое обновленное содержимое XML, сообщая ему, что доступна новая версия. Так как я хотел проверить файл через мой веб-браузер, он также показывал содержание "СТАРЫЙ" (предыдущая версия), то есть приложение имеет значение "ДО ДАТЫ", что неверно.
После того, как я нажал кнопку "обновить" в Chrome, содержимое, которое я отобразил, было обновлено и снова запустил Updater.exe.
У меня нет никакой идеи, что на самом деле происходит. Какое отношение "обновление" страницы в браузере имеет к моему приложению?
Проверяя класс XMLTextReader из MSDN, он говорит:
Представляет читателя, который обеспечивает быстрый, не кэшированный, прямой доступ к данным XML. Так что да, поиск в интернете говорит мне, что я должен искать "кеширующие" проблемы, еще больше запутывает меня, когда я читаю описание класса. После обновления в браузере после такого длительного периода без обновлений все последующие обновления работают просто отлично. Кажется, что "большая пауза" всегда создает эту проблему.
Во всяком случае, я хотел бы найти решение этого. Может быть, это проблема только у меня. Но я не хочу видеть эту проблему от пользователей, использующих приложение. У них нет ни времени, ни знаний, чтобы "освежить" что-либо. Это просто должно работать.
Пример XML здесь:
<?xml version="1.0" encoding = "utf-8" standalone="yes"?>
<Application>
<version>2.0.0.16</version>
<url>http://server/folder/gibberish.extension</url>
</Application>
И некоторый код, который я использую для чтения XML.
Version newVersion = null;
string xmlUrl = "http://server/folder/file.xml";
XmlTextReader reader = null;
try
{
reader = new XmlTextReader(xmlUrl);
reader.MoveToContent();
string elementName = "";
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "Application"))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
elementName = reader.Name;
}
else
{
if ((reader.NodeType == XmlNodeType.Text) && (reader.HasValue))
{
switch (elementName)
{
case "version":
newVersion = new Version(reader.Value);
break;
case "url":
downloadUrl = reader.Value;
break;
}
}
}
}
}
}
catch (Exception ee)
{
//catch error
}
Я приложил все усилия, чтобы описать проблему как можно более подробно (с моими простыми знаниями в английском языке) здесь. И я искал в Интернете без удачи. Я надеюсь, что это не приведет к дублированию. Если у вас есть другие вопросы, не стесняйтесь спрашивать. Я обязательно дам вам всю информацию, необходимую для решения этой странной головоломки.
С наилучшими пожеланиями, MiKE
1 ответ
Первое, что приходит мне в голову, это CDN. Используете ли вы какие-либо CDN, такие как CloudFlare? CloudFlare и аналогичные CDN на короткое время кэшируют ваш контент, вызывая этот эффект.