C# 下载文件已停止下载文件

C# 下载文件已停止下载文件,c#,webclient,downloadfile,downloadfileasync,C#,Webclient,Downloadfile,Downloadfileasync,我有一个更新程序应用程序,它在更新可用时启动。这个应用程序只是将一个新的exe下载到一个指定的路径,但突然它不再工作了。更新程序下载大小为0kb的文件,并且不会给出任何错误 2个月前,我将新的exe上传到服务器,许多客户端成功下载了该文件。昨天,我的一个客户注意到,当他开始使用应用程序时,更新失败了。更新程序在许多客户机上运行,并且始终有效。可能是服务器问题吗 以下是C#中的更新程序代码: 我在CentOS上运行Apache,其中存储了exe文件。文件夹/文件权限正常。当我在任何浏览器中打开ex

我有一个更新程序应用程序,它在更新可用时启动。这个应用程序只是将一个新的exe下载到一个指定的路径,但突然它不再工作了。更新程序下载大小为0kb的文件,并且不会给出任何错误

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

以下是C#中的更新程序代码:

我在CentOS上运行Apache,其中存储了exe文件。文件夹/文件权限正常。当我在任何浏览器中打开exe URL时,文件已成功下载。 我在过去2个月内从未更改exe文件,也没有更改Web服务器上的任何其他设置。这种方法使用了两年,现在它自动停止工作

更新:

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

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

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

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
在这条线以下

webclient.DownloadFileCompleted += new AsyncCompletedEventHandler(webclient_DownloadFileCompleted);

这解决了我的问题。

我在不同的机器上测试了这个,它在所有机器上都不再工作了……我敢打赌服务器现在需要TLS1.2。这并不是什么新鲜事,自2016年和HeartBleed以来,每个人都在迁移到TLS1.2。早在2016年,航空公司就放弃了对低于TLS1.2的支持。谷歌、Azure、亚马逊、银行等公司已经宣布,他们将在未来几年内停止对任何更少的产品的支持。这种方法已经运行了两年,现在它自动停止了工作。很明显,这就是问题所在…@Sefe我敢打赌问题在于“我们多年来忽视了SSL/TLS1.0的弃用,现在我们无法连接”,这根本不是问题所在。问题是服务器放弃了对较旧的TLS协议的支持,这在过去3年中一直在所有服务提供商和公司中发生。我现在的另一个担忧是,我被卡住了,因为我不知道如何更新每个客户端计算机上的所有更新程序:(建议提供任何建议。正确的解决方案是使用当前的.NET版本,Windows OS..NET在SSL协商过程中使用自4.6.1以来OS上可用的最佳算法。这意味着,当TLS1.3在OS上可用时,.NET将自动获取它。只有在较旧的.NET版本中才需要硬编码TLS版本。)。较旧的操作系统版本(如Windows 2008 R2)在默认情况下也需要修补以支持TLS1.2。这很重要,因为人们正准备迁移到TLS1.3。硬编码TLS1.2可能会在不久的将来导致问题检查
webclient.DownloadFileCompleted += new AsyncCompletedEventHandler(webclient_DownloadFileCompleted);