C# WebClient DownloadFile方法下载损坏的PDF文件

C# WebClient DownloadFile方法下载损坏的PDF文件,c#,webclient,downloadfile,C#,Webclient,Downloadfile,在我的Windows应用程序中,我使用WebClient DownloadFile方法从本地网络上的服务器下载几个PDF文件 每个文件都是在调用其URL时生成的报告。报告大小不同,生成时间也不同 我的代码在大约400个URL的列表中循环,对于每个URL,它调用DownloadFile方法,并生成相应的报告并下载到本地机器。URL绝对正确 问题是,几乎每次应用程序运行时,一些下载的文件都会被损坏,只下载了7KBs。我认为这是元数据,Acrobat Reader在我尝试打开文件时会给我一条消息: “

在我的Windows应用程序中,我使用WebClient DownloadFile方法从本地网络上的服务器下载几个PDF文件

每个文件都是在调用其URL时生成的报告。报告大小不同,生成时间也不同

我的代码在大约400个URL的列表中循环,对于每个URL,它调用DownloadFile方法,并生成相应的报告并下载到本地机器。URL绝对正确

问题是,几乎每次应用程序运行时,一些下载的文件都会被损坏,只下载了7KBs。我认为这是元数据,Acrobat Reader在我尝试打开文件时会给我一条消息: “…它不是受支持的文件类型,或者因为文件已损坏…”

损坏的文件并不总是相同的,当我重新运行应用程序时,这些文件通常会成功,而其他一些文件可能会失败……这似乎是随机的,我无法找到标准

注1:我不希望文件在其优先级完全下载之前开始下载,这就是我不使用异步方法的原因。 注2:所有文件都是Oracle报告,通过查询数据库生成。 注意3:如果文件损坏,则不会引发异常

这是我的密码:

using ( WebClient client  = new WebClient() )
{
    for(int i=0; i< URL_List.Length; i++)
    {
        try
        {
        client.DownloadFile( URL_List[i] , myLocalPath+fileName+".pdf" );
        }
        catch(Exception x)
        {
         // write exception message to error log...
        }
    }
}

提前谢谢

在服务器上,您是否可以将发送给客户端的内容保存到文件中,以确认这是客户端问题而不是服务器问题?@MattHouser:您的意思是,在调用DownloadFile方法之前,我应该将生成的报告保存到服务器,以确保生成成功?正确。隔离问题。确认PDF是否已正确创建。如果问题是服务器正在生成损坏的PDF,那么调试客户端将浪费时间。此外,如果您使用标准web浏览器访问PDF的URL,文件下载是否正确?当我使用浏览器调用URL时,它会返回正确的PDF文件。我不知道按顺序生成大量报告是否会导致服务器出现问题。无论如何,我已经声明,损坏的文件是随机的!并且重新运行应用程序通常可以正常工作。损坏的文件通常会被正确的文件替换。作为测试,我会按照你说的做,并会反馈。非常感谢你,先生,亲爱的马特,你说得对。我记得当Oracle report失败时,它会在HTML页面而不是PDF内容中返回错误消息,因此我将受损文件的扩展名更改为HTML,并在浏览器中打开它们。内容是从Oracle报告返回的错误消息。。。我尚未检查该问题,但至少现在我知道这是服务器端问题:。非常感谢你的帮助。