.net FluentFTP连接中断,但无异常

s3fp2yjn  于 2023-01-27  发布在  .NET
关注(0)|答案(1)|浏览(333)

我在代码中使用FluentFTP在内部将数据传输到FTP服务器。如果在上传过程中与FTP服务器的连接中断,那么没有异常。
但奇怪的是,并不是所有的日期都会发生这种情况!如果我使用一个 *.7z文件,当连接断开时会出现异常。
我糊涂了!
传输 *.7z文件时,为什么它会识别出连接中断(服务停止)并在服务再次可用时重新启动连接,而使用 *.opus文件时,程序会在等待中停止?

public class FileWatcher
{
   public static async Task Main(string[] args)
   {
      do
      {
        Console.WriteLine("Und los geht es!");
        await UploadFileAsync();
        await Task.Delay(15000);
      } while (true);
}

static async Task UploadFileAsync()
{
    try
    {
        string[] filePath = Directory.GetFiles(@"C:\temp\ftpupload", "*", 
        SearchOption.AllDirectories);
        var token = new CancellationToken();
        using (AsyncFtpClient client = new AsyncFtpClient())
        {
            client.Host = "192.168.1.100";
            client.Port = 21;
            client.Credentials.UserName = "test";
            client.Credentials.Password = "test123";
            client.Config.EncryptionMode = FtpEncryptionMode.None;
            client.Config.InternetProtocolVersions = FtpIpVersion.IPv4;
            client.Config.ValidateAnyCertificate = true;
            client.Config.ConnectTimeout = 10000;

            Console.WriteLine("Connecting......");

            await client.AutoConnect(token);

            Console.WriteLine("Connected!");

            foreach (var erg in filePath)
            {
                Console.WriteLine("File is uploading: " + erg.GetFtpFileName());
                await client.UploadFile(erg, "/" + erg.GetFtpFileName(), 
                FtpRemoteExists.Overwrite, true, token: token);
                Console.WriteLine("File successfully uploaded: " + 
                erg.GetFtpFileName());
                System.IO.File.Delete(erg);
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
  }
}

将文件上载到服务器时出错。有关详细信息,请参阅InnerException。

ie3xauqp

ie3xauqp1#

我认为问题在于你没有从Main方法中捕获异常,try-catch块内部的代码可以正确执行,但是如果异常发生在try-catch块外部,程序将终止,而不报告错误。
因此,要修复它,您应该在Main方法中添加一个try-catch块,并在其中使用await关键字调用UploadFileAsync()方法。
另一个原因可能是文件的大小或在Main方法中设置的延迟。

相关问题