Try/Catch 没有捕捉到 WebException

Posted

技术标签:

【中文标题】Try/Catch 没有捕捉到 WebException【英文标题】:Try/Catch didn't catch WebException 【发布时间】:2013-02-05 06:22:44 【问题描述】:

我构建了一个 .NET Mono 应用程序,它每分钟将文本文件上传到服务器。 在我看来,避免应用程序崩溃的最好方法是在上传代码周围使用 try-catch,这样可以捕获意外错误。

并且总是正常运行大约 2 天,然后突然崩溃。我已经找了几个星期了,但还是找不到。

我得到的错误是:

未处理的异常:System.Net.WebException:请求中止于 System.Net.FtpWebRequest.CheckIfAborted() [0x00000] in :0 在 System.Net.FtpWebRequest.set_Sate(RequestState 值) [0x00000] 在 :0 处 System.Net.FtpWebRequest.ProcessRequest(请求状态值)[0x00000] 在 :在 System.Threading.Thread.StartUnsafe() 中的[0x00000]:

【问题讨论】:

【参考方案1】:

你的电视机可能没有问题,我的意思是,你的代码。

问题在于 Mono 的 FtpWebRequest 实现不是很健壮(在 FTP 会话的各个阶段处理超时)。我对类似案例进行了分析,并在那里发布了我的发现:

Mono for android / MonoTouch System.Net.WebException: Request aborted

您的情况虽然不相同,但指出了 Mono 的 FtpWebRequest 的常见问题“包”。

【讨论】:

【参考方案2】:

这样的错误真的很难找到。 你说你在一个线程中运行这个函数。所以我猜它是从while 循环而不是Thread.Sleep(1000*60);fire and forget 调用的。原因可能是函数在下一次调用之前没有完成,或者FtpWebRequest 仍然没有关闭,没关系,它在不同的上下文中运行。

我遇到了类似的问题,您可以尝试以下方法:

1) 将FtpWebRequest request 设为全局并在函数调用之前检查它是否仍然存在。

2) 在函数端调用垃圾收集器:

GC.Collect();
GC.WaitForPendingFinalizers();

如果可行,请告诉我。

【讨论】:

我在异常发生的那一刻对该行进行了截图。 imageshack.us/photo/my-images/16/schermafdrukvan20130220.png

以上是关于Try/Catch 没有捕捉到 WebException的主要内容,如果未能解决你的问题,请参考以下文章

Objective-c Try/Catch 没有捕捉到

异常处理——Java的try catch用法

用Go语言异常机制模拟TryCatch异常捕捉

若catch中抛出运行时异常,请问在try catch语句块中return语句是写在try中还是写在try catch语句外。

一些Windows API导致的Crash以及使用问题总结(API的AV失败,可以用try catch捕捉后处理)

SQL Server Try Catch 异常捕捉