Проверка нескольких путей для существующего файла на сервере - PullRequest
0 голосов
/ 12 марта 2020

Я пишу небольшое приложение, которое должно проверить на сервере, существует ли установщик программного обеспечения, и если да, загрузить в файл.

Для этого приложение проверяет веб-сайт на наличие последних номер версии, например 6.13.2.38 с использованием HtmlAgilityPack .

URL-адрес этой версии выглядит примерно так: http://update.xyzsoftware.com/Files/Updates/6.13.2.38/xyzSoftware6_13_2_38_en_FullInstallerx64.exe.

Теперь я написал метод, который просматривает последнюю часть номеров версий, чтобы проверить, есть ли такие версии, как http://update.xyzsoftware.com/Files/Updates/6.13.2.38/xyzSoftware6_13_2_37_en_FullInstallerx64.exe http://update.xyzsoftware.com/Files/Updates/6.13.2.38/xyzSoftware6_13_2_36_en_FullInstallerx64.exe
...
http://update.xyzsoftware.com/Files/Updates/6.13.2.38/xyzSoftware6_13_2_1_en_FullInstallerx64.exe

.

static string checkValidity(string urlToTest)
    {
        string validityResult = "";
        WebRequest request = WebRequest.Create(new Uri(urlToTest));
        request.Method = "HEAD";

        try
        {
            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                HttpStatusCode status = response.StatusCode;

                validityResult = Convert.ToString(status);

                response.Close();
            }
        }

        catch (Exception exception)
        {
            validityResult = "not OK";
        }

        return validityResult;
    }

То, что я испытываю сейчас, - это то, что я получаю сообщение об исключении для всех протестированных URL-адресов. Попытка получить доступ к исходному (рабочему) URL-адресу в браузере говорит мне The connection was reset

Сначала я испугался и подумал, что я выключил сервер. Но когда я проверил адрес через альтернативное соединение inte rnet, все было в порядке.

В чем может быть причина этого? Возможно, локальный маршрутизатор / брандмауэр, DNS-сервер или удаленный сервер?

Что можно сделать, чтобы избежать такого поведения?

Заранее спасибо.

С уважением, Ларс

1 Ответ

0 голосов
/ 12 марта 2020

Если я вас правильно понял, это довольно ужасный способ сделать ваше обновление. Похоже, вы говорите, что программа будет увеличивать числа и пробовать URL-адреса, пока не получит тот, который не 404

. Было бы лучше иметь один фиксированный URL-адрес:

http://update.xyzsoftware.com/version/latest/SomeSoftwareName

При этом выполняется поиск текущей версии этого программного обеспечения и возвращается ответ:

class VersionController{

  public ActionResult Latest(string appname){
    //lookup version number of appname
    var ver = dbContext.Versions.Where(v => v.AppName == appname).OrderByDescending(v => v.VersionAsFloat).First();

    return Json(new { Version = ver.VersionAsFloat, Url = ver.Url });

  }
}

Использовать испущенное JSON на стороне клиента, используйте команду «Версия», чтобы определить, является ли удаленная версия выше, чем локальный, и если это так, загрузите обновление по указанному URL-адресу

...