我需要编写一个连接到FTP服务器的应用程序。此FTP服务器不允许被动模式连接。我可以使用Filezilla连接到FTP服务器。
我开发了一个C# WCF服务,它使用FTPWebRequest类连接到这个FTP服务器。下面是FTPWebRequest对象的基本设置:
ftpreq.Proxy = null;
ftpreq.KeepAlive = true;
ftpreq.UsePassive = false;当我从Visual (Ctrl+F5)运行WCF服务时,它连接到FTP服务器并下载所需的文件,没有任何问题
但是,当我在本地IIS 7.5中承载该服务时,它无法连接到FTP服务器,错误如下:
远程服务器返回一个错误:(425)无法打开数据连接。
在搜索了一些这个问题之后,我尝试了一下防火墙设置,但这是没有用的。不确定它是否与某些IIS安全问题或其他问题有关。
任何帮助都将不胜感激。
发布于 2015-05-22 03:41:14
这是我的方式:
启动\控制面板\ Windows防火墙\允许的程序。
这里!在您的应用程序上勾选复选框以允许它通过Windows FireWall。记住!勾选“家庭/工作(私人)”以及复选框“公共”。
祝好运!
发布于 2017-04-03 10:50:28
这里有一个复杂的解决方案
步骤1使用两个网络通道(端口和端口范围),使用单个ftp (非ftp)。第一个(tcp:21)用于auth,第二个用作数据通道.
当在iis上配置ftp时,为auth和控制通道打开21个端口,然后在iis控制面板上"FTP防火墙支持“中指定与ftp服务器连接的网络接口的数据端口范围(5000-6000)和外部ip。
最后,在windows防火墙中打开tcp:21并创建custon规则,允许在tcp:500-6000上进行连接。重新启动系统(或者只是重新启动服务)。
仅此而已。
ps。请记住,iis上的ftp使用tcp:21作为control/auth,而tcp:5000-6000用于数据。tcp:5-6000可能是iis管理器第一次更改,第二次是在windows防火墙中打开。
发布于 2016-11-17 09:36:50
我评论了这个设置:
UseBinary,代理,KeepAlive,UsePassive
现在效果很好:
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)WebRequest.Create(new Uri(ftpLocation + remoteDir));
//reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
//reqFTP.Proxy = null;
//reqFTP.KeepAlive = false;
//reqFTP.UsePassive = false;
response = reqFTP.GetResponse();
reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();此代码来自microsoft论坛:https://social.msdn.microsoft.com/Forums/en-US/079fb811-3c55-4959-85c4-677e4b20bea3/downloading-all-files-in-directory-ftp-and-c?forum=ncl。
https://stackoverflow.com/questions/24694414
复制相似问题