Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从webservice下载文件_C#_Asp.net Web Api_Webclient_Webclient Download - Fatal编程技术网

C#从webservice下载文件

C#从webservice下载文件,c#,asp.net-web-api,webclient,webclient-download,C#,Asp.net Web Api,Webclient,Webclient Download,我有一个web服务,比如从服务器下载zip文件。当我通过web浏览器打开URL时,我可以正确下载zip文件。问题是当我试图通过桌面应用程序下载zip文件时。我使用以下代码下载: WebClient webClient = new WebClient(); webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); webClient.DownloadProgressChanged += new Dow

我有一个web服务,比如从服务器下载zip文件。当我通过web浏览器打开URL时,我可以正确下载zip文件。问题是当我试图通过桌面应用程序下载zip文件时。我使用以下代码下载:

WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync(new Uri(@"http://localhost:9000/api/file/GetFile?filename=myPackage.zip"), @"myPackage.zip");

测试之后,我下载了myPackage.zip,但它是空的,0 KB。有关此示例或任何其他服务器代码+客户端代码示例的任何帮助?

您可以尝试改用HttpClient。通常,它更方便

        var client = new HttpClient();
        var response = await client.GetAsync(@"http://localhost:9000/api/file/GetFile?filename=myPackage.zip");

        using (var stream = await response.Content.ReadAsStreamAsync())
        {
            var fileInfo = new FileInfo("myPackage.zip");
            using (var fileStream = fileInfo.OpenWrite())
            {
                await stream.CopyToAsync(fileStream);
            }
        }

这里只是一个正常检查:您是否在等待异步请求完成?是否调用过
ProgressChanged
?在调试器中进行验证。如果线程(或主机进程)在传输第一个数据块之前终止,下载将被中止,这将解释文件大小为零的原因。@AlexanderToptygin如果正在响应事件,他是否需要这样做?请使用DownloadFile而不是DownloadFileAsync,以确保安全。告诉我们它是否解决了这个问题?我没有使用wait,它说的是“不能等待无效”。改变的进度不是“永远”,而是“完全的是”。这正是我所需要的。谢谢(顺便说一句,“方便”是相对的。我本可以在Perl中使用LWP::UserAgent模块在一行代码中完成所有这些,但我们必须使用我们拥有的。):-)这很好,但应该指出,应该重用客户机,而不是在每次使用后创建一个新实例并进行处理。