2

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

并且始终正确运行大约 2 天,然后突然崩溃。我已经找了几个星期的原因,但找不到。

我得到的错误是:

未处理的异常:System.Net.WebException:请求在 System.Net.FtpWebRequest.CheckIfAborted() [0x00000] in :0 at System.Net.FtpWebRequest.set_Sate (RequestState value) [0x00000] in :0 在 System.Net 中止。 FtpWebRequest.ProcessRequest(RequestState value) [0x00000] in <filename:0 unknown>: 在 System.Threading.Thread.StartUnsafe () [0x00000] in <filename:0 unknown>:

4

2 回答 2

1

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

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

Mono for Android / MonoTouch System.Net.WebException:请求中止

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

于 2013-07-11T06:42:51.230 回答
0

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

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

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

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

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

请让我知道这是否有效。

于 2013-02-20T09:57:14.533 回答