Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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# 等待下载完成_C#_Web Services_Soap_Download_Polling - Fatal编程技术网

C# 等待下载完成

C# 等待下载完成,c#,web-services,soap,download,polling,C#,Web Services,Soap,Download,Polling,我需要从Web服务下载实时创建的zip文件。 让我解释一下。 我正在开发一个使用SOAPXMLWebService的web应用程序。webservice中有一个导出函数,它返回一个临时url来下载文件。在请求下载时,服务器创建文件,并在几秒钟后使其可供下载。 我想用 webClient.DownloadFile(url,@“c:/etc../”) 此函数用于下载文件并将其保存到0 KB。太快了!服务器没有时间创建文件。我也试着把 但是不起作用。 在调试模式下,如果我在webClient.Down

我需要从Web服务下载实时创建的zip文件。 让我解释一下。 我正在开发一个使用SOAPXMLWebService的web应用程序。webservice中有一个导出函数,它返回一个临时url来下载文件。在请求下载时,服务器创建文件,并在几秒钟后使其可供下载。 我想用

webClient.DownloadFile(url,@“c:/etc../”)

此函数用于下载文件并将其保存到0 KB。太快了!服务器没有时间创建文件。我也试着把

但是不起作用。 在调试模式下,如果我在webClient.DownloadFile上设置了一个断点,并在3、4秒后再次启动,则服务器有时间创建该文件,并且我有一个完整的下载

Web服务的开发人员建议我在url上使用“轮询”,直到文件准备好下载。它是如何工作的


我怎样才能解决我的问题?(我还尝试下载文件异步模式)

我的应用程序中也有类似的机制,它工作得非常好。WebClient确实请求并等待,因为服务器正在创建响应(文件)。若WebClient下载了0kb,这意味着服务器对请求做出了一些空响应。这可能不是一个bug,而是一个设计。如果创建文件需要很长时间,此方法可能会导致超时。另一方面,如果创建文件需要很短的时间,服务器端应该用文件响应(使WebClient在请求时挂起,直到文件准备就绪)。我会尝试与其他开发人员讨论这个问题,也许会重新设计“文件生成器”

编辑:池意味着在循环中发出请求,例如每2秒一次。我之所以使用,是因为每次保存空文件都是无用的,而且会消耗资源,下载文件就是这样做的

        public void PoolAndDownloadFile(Uri uri, string filePath)
        {
            WebClient webClient = new WebClient();
            byte[] downloadedBytes = webClient.DownloadData(uri);
            while (downloadedBytes.Length == 0)
            {
                Thread.Sleep(2000);
                downloadedBytes = webClient.DownloadData(uri);
            }
            Stream file = File.Open(filePath, FileMode.Create);
            file.Write(downloadedBytes, 0, downloadedBytes.Length);
            file.Close();
        }

问题是,为什么服务会在文件准备就绪之前将url返回到文件?是否没有其他调用来查看您的工作是否已完成?当我调用webservice的函数ExportPrice()时,我只收到一个url来下载包含xml价目表的zip文件,并且我尝试将该url与webClient.DownloadFile()一起使用(大型邮轮公司的)此webservice显然,其他人使用它没有问题。正如我已经说过的,建议我使用池系统,我不知道如何在url上使用它。我不知道如何在url上进行“池”*这很好用!大约需要15秒,但这是服务器问题。非常感谢。我是意大利人,我会给你一个比萨饼
        public void PoolAndDownloadFile(Uri uri, string filePath)
        {
            WebClient webClient = new WebClient();
            byte[] downloadedBytes = webClient.DownloadData(uri);
            while (downloadedBytes.Length == 0)
            {
                Thread.Sleep(2000);
                downloadedBytes = webClient.DownloadData(uri);
            }
            Stream file = File.Open(filePath, FileMode.Create);
            file.Write(downloadedBytes, 0, downloadedBytes.Length);
            file.Close();
        }