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的主要内容,如果未能解决你的问题,请参考以下文章
若catch中抛出运行时异常,请问在try catch语句块中return语句是写在try中还是写在try catch语句外。