在 Windows Server 2008 R2 Web 服务器上,我有一个 Windows 服务,它将文件上传到外部 FTP 服务器。实际上是多个服务器(Google、Bing 等)。这是一个使用内置 .NET FTP 库的 .NET 应用程序。
我遇到了以下几种错误:
The operation has timed out.
The remote server returned an error: (425) Can't open data connection.
Windows 防火墙(域、私有、公共)设置为允许出站连接。
答案1
FTP 不是一种防火墙友好型协议。它出现于防火墙普遍存在的互联网时代之前,因此假定对话双方相互打开端口是完全没问题的。COMMAND 通道(即您在连接到 FTP 服务器时打开的通道)是您与服务器之间发起的连接。DATA 通道(即您用于下载内容的通道)是在您与服务器之间发起的连接。通过 FTP 服务器对你来说。更糟糕的是,你的 FTP 选择显示的端口是一个随机的高端口,因此配置防火墙以允许正确的端口是比较棘手的。
这就是他们在 FTP 协议中创建“被动”模式的原因。这是 PASV 动词。这告诉 FTP 服务器反转数据通道的启动方向;它为客户端提供要连接的高端口,客户端启动连接,服务器通过该连接提供数据。更容易通过防火墙。
对于 .NET 的库,设置使用被动属性设置为 True。