在Windows Server 2008 R2 Web服务器上,我有一个将文件上载到外部FTP服务器的Windows服务。 其实多台服务器(Google,Bing等)。 这是一个使用内置.NET FTP库的.NET应用程序。
我收到以下错误的混合:
The operation has timed out. The remote server returned an error: (425) Can't open data connection.
Windows防火墙(域,专用,公用)设置为允许出站连接。
FTP不是防火墙友好的协议。 它早于防火墙常见的互联网时代,所以假设对话双方完全相互开放端口。 COMMAND通道,即连接到FTP服务器时打开的通道,是您与服务器之间启动的连接。 数据通道,你用来下载的东西,是由FTP服务器为你启动的连接。 更糟糕的是,你的FTPselect的端口是一个随机的高端口,所以configuration你的防火墙允许正确的端口是棘手的。
这就是为什么他们在FTP协议中创build了“被动”模式。 这是PASV动词。 这告诉FTP服务器反转DATA通道的启动方向; 它给予客户端高端口连接,客户端启动连接,服务器通过该连接提供数据。 防火墙更容易。
对于.NET的库,将UsePassive属性设置为True可能会获得更好的运气。