我有一个c#.netcore 2.2控制台应用程序来测试ftp命令。 它可以在我的开发机上完美运行,但不能在我的生产服务器上运行。 ftp命令已执行,但没有任何反应,也没有引发错误。
这是我的应用程序的代码
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服务器,这是我的开发机上的结果
然后在我的生产服务器上
有人知道发生了什么吗? 谢谢
答案 0 :(得分:0)
感谢@MartinPrikryl 通过查看FTP日志,我看到了来自两台计算机的呼叫之间的区别。
因此,我尝试添加UsePassive = true的新呼叫,现在它可以在两台计算机上使用。
我唯一无法解释的是“为什么它不会产生任何错误?”