我正在使用C#WebClient();从服务器下载文件。问题是当我没有互联网或服务器没有响应时,我的应用程序崩溃尝试下载此文件。 什么是避免崩溃,中止并通知与服务器的连接失败的最佳做法?
答案 0 :(得分:5)
只需处理WebClient.DownloadFile返回的异常:
try
{
WebClient.DownloadFile(uri, myPath);
}
catch(WebException webEx)
{
// There was an exception due to network or path problems...
// Notify the user?
}
答案 1 :(得分:2)
服务器没有响应是一种特殊情况,最好使用try / catch块进行适当的异常处理。
处理WebClient
请求的例外情况是WebException
。您可以检查异常对象以获取更多详细信息。 Status
属性将包含status value,为您提供实际出错的更多信息。
try
{
WebClient client = new WebClient();
byte[] pageData = client.DownloadData("http://www.contoso.com");
string pageHtml = Encoding.ASCII.GetString(pageData);
Console.WriteLine(pageHtml);
client.DownloadFile("http://www.contoso.com", "page.htm");
}
catch (WebException webEx)
{
Console.WriteLine(webEx.ToString());
if(webEx.Status == WebExceptionStatus.ConnectFailure)
{
Console.WriteLine("Are you behind a firewall? If so, go through the proxy server.");
}
}
答案 2 :(得分:1)
如果它是交互式的,那么肯定是在捕获相关异常时最好的事情。无论您是中止所有内容还是发送消息(以及该消息是模态还是非模态消息)都将取决于您的整体UI。通常,在命令行或Web应用程序中对中止更为可接受(对每个应用程序都有适当的响应),仅使用错误消息中止该操作更适合GUI应用程序。
如果它是作为服务等运行的东西,你会想要记录异常并继续下一个操作,可能有一定程度的退避(连续两个例外,等待一点作为网络可能完全失败;另一个例外,这次等待更长时间。)
在任何一种情况下,您应该明确地捕获WebException
s(以及可能IOException
尝试保存文件失败)并让其他异常(更可能来自应用程序中的错误)被你的整体异常处理策略所吸引。