【问题标题】:Try/Catch didn't catch WebExceptionTry/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]:

【问题讨论】:

    标签: c# mono


    【解决方案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();
      

      如果可行,请告诉我。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2016-01-26
      • 1970-01-01
      相关资源
      最近更新 更多