我们正在从Windows服务器盒迁移到Azure上的虚拟机。我们的SQL存储过程使用Integration Services包生成feed文件并将它们上传到客户端ftp服务器。
我们通过在Windows上构建脚本文件并使用本机ftp.exe
客户端来实现此目的。我的脚本文件如下所示:
open ftp.ourserver.net
myusername
mypassword123
lcd G:\
cd /
prompt
put "G:\DataFeeds\SmithCo_02272017.txt" "SmithCo_DailyFeed.txt"
bye
这在旧服务器上运行正常。当我使用命令提示符运行此代码时,我得到了:
421活动数据通道已超时。
我可以使用该机器上的WinSCP客户端通过基本连接手动上传文件。
我认为这是一个端口问题所以我在Windows防火墙中为端口21创建了一个出站规则,允许所有连接。
然后我在Azure中为端口21创建了一个端点。
是否还有另一个步骤可以打开它或者我可能遗失的东西?
答案 0 :(得分:1)
Windows命令行ftp.exe
仅支持FTP活动模式。在活动模式下,服务器必须连接回客户端以建立文件传输的数据连接。 ftp.exe
以上的内容不允许您选择,用于数据连接的端口。它会随机选择1024以上的任何可用端口号。因此,您必须为1024以上的所有端口创建端点。这可能是您不想做的事情。虽然你可以试试。
WinSCP可以工作,因为它(因为大多数现代FTP客户端)默认使用被动模式。对于被动模式,您无需在客户端打开任何端口。
请阅读我关于network configuration for FTP active and passive connection modes的文章了解详情。
由于WinSCP适合您,您可以使用WinSCP scripting interface替换ftp.exe
脚本。
就像(ftp.txt
):
open ftp://myusername:mypassword123@ftp.ourserver.net/
lcd G:\
cd /
put "G:\DataFeeds\SmithCo_02272017.txt" "SmithCo_DailyFeed.txt"
exit
(尽管lcd
在您的和WinSCP脚本中都是多余的。)
运行脚本如:
winscp.com /script=ftp.txt
请参阅converting Windows FTP script to WinSCP script指南。
(我是WinSCP的作者)