DownloadFile перестал загружать файл - PullRequest
1 голос
/ 29 марта 2019

У меня есть приложение для обновления, которое запускается, когда доступно обновление.Это приложение просто загружает новый exe-файл по указанному пути, но вдруг оно больше не работает.Программа обновления загружает файл размером 0 КБ и не выдает никакой ошибки.

Я загрузил новый exe-файл на сервер 2 месяца назад, и многие клиенты успешно загрузили файл.Вчера один из моих клиентов заметил, когда он начал работать с приложением, и обновление не удалось.Программа обновления работает на многих клиентах и ​​работает всегда.Может ли это быть проблема с сервером?

Вот код обновления в C #:

public void StartUpdate()
{
    WebClient webclient = new WebClient();
    try
    {
        //webclient.DownloadFile("http://www.example.nl/folder/example.exe", @"C:\example\example.exe");

        webclient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webclient_DownloadProgressChanged);
        webclient.DownloadFileCompleted += new AsyncCompletedEventHandler(webclient_DownloadFileCompleted);
        webclient.DownloadFileAsync(new Uri("http://www.example.nl/folder/example.exe"), @"C:\example\example.exe");
    }
    catch (Exception)
    {
        MessageBox.Show("Download Failed.\n\nPlease contact your system administrator");
        Application.Exit();
    }
}

void webclient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
    label1.Text = "Download successfully!";
    label3.Text = "Download complete!";
    timer2.Enabled = true; //here some other magic happens like start the program and exit this updater.
}

void webclient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    progressBar1.Maximum = (int)e.TotalBytesToReceive / 100;
    progressBar1.Value = (int)e.BytesReceived / 100;
}

Я использую Apache на CentOS, где хранится исполняемый файл.Папка / файл разрешены.Когда я открываю exe URL в любом браузере, файл успешно загружается.Я никогда не изменяю exe-файл за последние 2 месяца и другие настройки на веб-сервере.Этот метод работал в течение 2 лет, и теперь он автоматически перестал работать.

ОБНОВЛЕНИЕ:

System.Net.WebException: The request has been aborted: Cannot create a secure SSL / TLS channel.
 at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult)
 at System.Net.WebClient.GetWebResponse (WebRequest request, IAsyncResult result)
 at System.Net.WebClient.DownloadBitsResponseCallback (IAsyncResult result) A first chance exception or type 'System.ComponentModel.Win32Exception' occurred in System.dll

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Похоже, сертификат SSL вашего сервера поврежден. Возможно истек. Если вы используете самозаверяющий сертификат, убедитесь, что вы импортировали сертификат CA, который вы использовали для самостоятельной подписи сертификата вашего сервера. Другая возможность состоит в том, что ваш сервер (или клиент) имеет недопустимые системные часы. Таким образом, клиент считает, срок действия вашего сертификата истек.

0 голосов
/ 29 марта 2019

Программа не может обрабатывать защищенные URI. Я добавил следующую строку

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

ниже этой линии

webclient.DownloadFileCompleted += new AsyncCompletedEventHandler(webclient_DownloadFileCompleted);

которая исправила мою проблему.

...