【问题标题】:FTPWebRequest: Unable to connect to serverFTPWebRequest:无法连接到服务器
【发布时间】:2018-09-28 00:28:52
【问题描述】:

我在 ASP.NET 中编写了一个站点,它使用FTPWebRequest 每 15 秒从 FTP 服务器下载一个文本文件。当我在我的电脑上运行它时,它工作得很好。当我将它上传到我们的服务器时,FTP 下载失败。也不例外,它只返回 0 个值。

我认为防火墙可能有问题,所以我禁用了 Windows 防火墙,并禁用了传出防火墙,同样的问题。尝试了主动和被动FTP。我是否可能需要更改 IIS 管理器中的某些设置?

在 Server 2012 R2 上运行 IIS 10,在与 Exchange 2016 相同的 VM 上。

部分代码:

public static string[] GetTXT()
{
    // Get the object used to communicate with the server.  
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("FTP address");
    request.Method = WebRequestMethods.Ftp.DownloadFile;
    request.UsePassive = false;    //tried it with true as well

    request.Credentials = new NetworkCredential("user", "pass");

    FtpWebResponse response = (FtpWebResponse)request.GetResponse();

    Stream responseStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(responseStream);
    string result = (reader.ReadToEnd());
}

【问题讨论】:

  • FTP 服务器日志中是否有任何帮助?
  • 请澄清以下内容。问题标题说“无法连接到服务器”,但问题正文没有例外。它是哪一个? “0值”是否意味着它返回的值为零,或者什么都不返回,或者返回一个零长度的文件?
  • 没有人,但在这种情况下您可以提供更多帮助,因为防火墙配置很复杂docs.microsoft.com/en-us/iis/publish/using-the-ftp-service/… 请使用被动模式,然后在服务器端打开必要的端口。您可能已尝试禁用防火墙,但我怀疑您是否禁用了正确的防火墙,因此请耐心等待并再次检查。
  • 检查write运行生产服务器的账户的权限。
  • 在哪里可以找到这些 FTP 日志?我发现的所有日志都是 FTP 服务器日志,但就我而言,我是客户。当我打开我的站点时,我可以看到它尝试下载此 TXT 文件,但几秒钟后所有值都变为零。我想这是连接超时。我禁用的防火墙是内置的 windows 防火墙和我的 Endian 防火墙(路由器)上的防火墙。我不认为我可以禁用任何其他可能阻止我的流量的东西。目前我以域管理员身份运行该站点,它应该具有所有必需的权限。

标签: c# asp.net iis ftpwebrequest


【解决方案1】:

最终发现我在一个子文件夹中发布了该网站。 根文件夹可能包含旧版本。 无论如何,感谢您的帮助!

【讨论】:

    【解决方案2】:

    如果只是从服务器FTP下载,我推荐微软为你的方法实现的这个类WebClient

    或许能解决你的问题。

    public static string[] GetTXT()
    {   
        using (WebClient client = new WebClient())
        {
            var path = @"C:\local\path\file.txt";
            client.Credentials = new NetworkCredential("log", "pass");
            client.DownloadFile("ftp://ftp.example.com/remote/path/file.txt", path);
        }
        if (File.Exists(path))
        {
    
            return File.ReadAllLines(path);
        }
        //return something  
    }
    

    【讨论】:

    • 如果确实是防火墙问题,那么这段代码也不起作用。
    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 2020-01-24
    • 1970-01-01
    • 2011-12-29
    • 2020-10-14
    • 2018-12-09
    相关资源
    最近更新 更多