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 на короткое время кэшируют ваш контент, вызывая этот эффект.

Другие вопросы по тегам