.net核心Ftp命令不起作用,并且在我的生产服务器上不引发任何错误

时间:2019-04-24 12:29:48

标签: c# .net-core ftp

我有一个c#.netcore 2.2控制台应用程序来测试ftp命令。 它可以在我的开发机上完美运行,但不能在我的生产服务器上运行。 ftp命令已执行,但没有任何反应,也没有引发错误。

这是我的生产服务器上安装的dotnet版本: enter image description here

这是我的应用程序的代码

    class Program
{
    static async Task Main(string[] args)
    {
        var config = new FtpServerConfiguration
        {
            Login = "badlogin", 
            Password = "abcd1234", 
            Server = "ftp.myserver.com" 
        };

        Console.WriteLine("First Attempt with bad login");
        var results = await GetFileList(config, "");

        Console.WriteLine("\nSecond Attempt with good login");
        config.Login = "goodlogin";
        results = await GetFileList(config, "");

        Console.ReadLine();
    }


    private static async Task<IEnumerable<string>> GetFileList(FtpServerConfiguration config, string remoteDir)
    {
        IList<string> files = new List<string>();
        try
        {
            var request = (FtpWebRequest)WebRequest.Create(string.Concat("ftp://", config.Server, "/", remoteDir));
            request.KeepAlive = true;
            request.Method = WebRequestMethods.Ftp.ListDirectory;
            request.UseBinary = true;
            request.UsePassive = config.UsePassive;
            request.EnableSsl = false;
            request.Timeout = config.Timeout;
            request.Credentials = new NetworkCredential(config.Login, config.Password);

            Console.WriteLine("send command");
            using (var response = await request.GetResponseAsync())
            {
                Console.WriteLine("response received");
                var reader = new StreamReader(response.GetResponseStream());
                string line = reader.ReadLine();
                while (line != null)
                {
                    files.Add(line);
                    line = reader.ReadLine();
                }
            }
            Console.WriteLine("Files :");
            foreach (var file in files)
            {
                Console.WriteLine("\t" + file);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("ERROR: "+ex.Message);
        }

        return files;
    }
}
public class FtpServerConfiguration
{
    public string Server { get; set; }

    public string Login { get; set; }

    public string Password { get; set; }

    public bool UsePassive { get; set; }

    public int Timeout { get; set; } = 10000;
}

我从两台计算机上使用相同的凭据查询同一FTP服务器,这是我的开发机上的结果 enter image description here

然后在我的生产服务器上

enter image description here

有人知道发生了什么吗? 谢谢

1 个答案:

答案 0 :(得分:0)

感谢@MartinPrikryl 通过查看FTP日志,我看到了来自两台计算机的呼叫之间的区别。

因此,我尝试添加UsePassive = true的新呼叫,现在它可以在两台计算机上使用。

我唯一无法解释的是“为什么它不会产生任何错误?”