C#webClient.DownloadFile异常问题

C#webClient.DownloadFile异常问题,c#,C#,目前,我有一个从服务器下载文件的非常简单的代码,但是我经常遇到以下异常: 远程服务器返回错误:(500) 无法连接到远程服务器 Web服务器没有问题,它与我的服务有关,我想它超时了,我如何才能更可靠地处理这些问题?我的代码如下所示,非常简单 try { string[] splitCrawlerid = StaticStringClass.crawlerID.Split('t'); WebClient web

目前,我有一个从服务器下载文件的非常简单的代码,但是我经常遇到以下异常:

远程服务器返回错误:(500)
无法连接到远程服务器

Web服务器没有问题,它与我的服务有关,我想它超时了,我如何才能更可靠地处理这些问题?我的代码如下所示,非常简单

            try
        {
            string[] splitCrawlerid = StaticStringClass.crawlerID.Split('t');
            WebClient webClient = new WebClient();
            if (Directory.Exists("C:\\ImageDepot\\" + splitCrawlerid[2]))
            {

            }
            else
            {
                Directory.CreateDirectory("C:\\ImageDepot\\" + splitCrawlerid[2]);

            }
            webClient.DownloadFile(privateHTML, @"C:\ImageDepot\" + splitCrawlerid[2] + "\\" + "AT" + carID + ".jpeg");
        }
        catch (Exception ex)
        {
//not sure how to really handle these two exceptions reliably
}

对我来说,理想的情况是再次尝试下载该文件。

您可以将整个内容包装在一个0..3的for循环中,并且
webClient.DownloadFile(…)
后面的行可能是一个
中断。这样,如果出现异常,
中断将被跳过,应用程序将重试。但这对我来说更像是一个创可贴;我会花更多的时间弄清楚为什么事情会出问题

如果您想从应用程序的业务逻辑中删除所有“try-while-blah-else-till-rethrow where”代码,您可以定义如下扩展方法

public static T TryNTimes<T>(this Func<T> func, int n) {
    while (true) {
        try {
            return func();
        } catch {
            if (++i == n) throw;
        }
    }
}
public static T TryNTimes(此函数,int n){
while(true){
试一试{
返回func();
}抓住{
如果(++i==n)抛出;
}
}
}
像这样使用它

Func<File> downloader = () => client.DownloadFile(...);
var file = downloader.TryNTimes(5);
Func downloader=()=>client.DownloadFile(…);
var file=downloader.TryNTimes(5);
尝试设置一个。默认情况下不发送,MSDN警告说,如果未设置用户代理,某些web服务器将返回500错误

默认情况下,WebClient实例不发送可选的HTTP头。 如果请求需要可选标头,则必须添加标头 到Headers集合。例如,将查询保留在 响应时,必须添加用户代理标头。此外,服务器可能会返回 500(内部服务器错误),如果缺少用户代理标头


有关如何添加标头,请参见MSDN页面上的示例。

HTTP错误代码500是一个内部服务器错误。好的,如果我不明白,很抱歉,我确定问题出在我的邮箱上,问题是我知道是否重试,最终它会连接,我不想做一些乏味的重试事情,当你说“你的盒子”时,你是指你的计算机还是网络服务器?我的计算机,很抱歉有任何混淆,你用什么URL下载文件?我实际上要做一些类似于public static int countdown=0的事情;虽然{countdown<5}捕获重复,但我认为这可能是X幂的错误做法。TryNTimes在这方面有帮助吗?(实际上,我想对于WebClient.DownloadFile,您需要一个操作而不是Func,因为DownloadFile返回void)。