错误捕捉webexception
问题描述:
我正在使用一个简单的Web客户端从Web服务检索一些XML,我有这个封装在一个简单的尝试,catch块(捕捉WebException)。如下所示;错误捕捉webexception
try
{
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.DownloadStringAsync(new Uri("http://ip/services"));
}
catch (WebException e)
{
Debug.WriteLine(e.Message);
}
没有,如果我更改IP地址映射到一个无效的,我会预期它抛出一个异常,并输出消息到调试窗口。但事实并非如此,看起来catch块甚至没有被执行。除了以下内容外,没有任何内容出现,除了调试窗
A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll
A first chance exception of type 'System.Net.WebException' occurred in System.Windows.dll
A first chance exception of type 'System.Net.WebException' occurred in System.Windows.dll
我的代码看起来很对我,所以我不明白为什么异常不被捕获?
答
从您对错误消息的描述中,我会假设抛出的实际异常是类型“FileNotFoundException”。
您是否尝试过捕获异常并检查类型?这可能是网络异常是内部异常。
try
{
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.DownloadStringAsync(new Uri("http://ip/services"));
}
catch (Exception ex)
{
Debug.WriteLine(ex.GetType().FullName);
Debug.WriteLine(ex.GetBaseException().ToString());
}
更新:我只是注意到,你实际上调用的是一个异步方法。
作为一个健全性检查,我会建议交换到非异步方法,并检查由此产生的错误。
WebClient.DownloadString Method (Uri)
您还可以受益于看这个网页,其中通过使用Web客户端作为一个例子捕获异步错误散步。
答
例外绝不会从DownloadStringAsync提高。它根本不会抛出它,但DownloadString(非Async)会抛出它。我不知道这是否是一个错误,我认为异步方法不会抛出异常除了ArgumentException外,尽管文档states其他。
你要“抓”在DownloadStringCompletedEventHandler错误:
void DownloadStringCompletedEventHandler(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
{
Debug.WriteLine(e.Error);
return;
}
几乎总是可以忽略“第一次机会”的异常,这些都是框架内捕获并做相应的处理。有关更多信息,请参阅this question。
您是否试图捕获一般异常?像catch(Exception ex)' – NaveenBhat
我使用异常获得相同的结果。谢谢 – Nathan