DownloadFile停止下载文件

时间:2019-03-29 11:07:00

标签: c# webclient downloadfile downloadfileasync

我有一个可用的更新程序正在启动。该应用程序只是将一个新的exe下载到指定的路径,但是突然不起作用了。更新程序下载的文件大小为0kb,没有任何错误。

两个月前,我已将新的exe上传到服务器,许多客户端成功下载了该文件。昨天,我的一位客户注意到他开始使用该应用程序且更新失败。该更新程序在许多客户端上运行,并且始终有效。可能是服务器问题吗?

这是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;
}

我在存储exe文件的CentOS上运行Apache。文件夹/文件权限还可以。当我在任何浏览器中打开exe URL时,文件已成功下载。 在过去的2个月内,我从未更改过exe文件,也从未在网络服务器上更改过任何其他设置。这种方法已经工作了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 个答案:

答案 0 :(得分:2)

您的服务器SSL证书似乎已损坏。可能已过期。如果使用的是自签名证书,请确保已导入用于自签名服务器证书的CA证书。另一种可能性是您的服务器(或客户端)的系统时钟无效。因此客户端认为您的证书已过期。

答案 1 :(得分:0)

该程序无法处理安全的uri。我添加了以下行

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

此行下方

webclient.DownloadFileCompleted += new AsyncCompletedEventHandler(webclient_DownloadFileCompleted);

解决了我的问题。