WinSCP .NET库FTP传输失败,显示“控件的IP地址和数据连接不匹配”

问题描述

我已经使用WinSCP .NET程序集实现了FTP代码,并将其托管在Azure AppService上。

它可以在本地和Azure上运行。

但是在很少的随机时间内,当托管在Azure上时,它会引发以下错误

传输文件'D:\ local \ Temp \ test_settings.txt'时出错。服务器使用主机地址发送了无法回复的地址为10.YYY.YYY.YYY的被动答复。将文件复制到远程端失败。传输“ /test_settings.txt”的数据连接被拒绝,控件的IP地址和数据连接不匹配

由于IP以10开头,是否表示它在FTP服务器的网络中是本地的? 我可以做些改善实施的事情吗?

您认为该解决方案在被多个请求同时使用时会出现问题吗?

我的代码Simple C# example的副本,具有以下设置:

Sessionoptions sessionoptions = new Sessionoptions
{
  Protocol = Protocol.Ftp,UserName = username,Password = password,GiveUpSecurityAndAcceptAnyTlsHostCertificate = true,FtpSecure = FtpSecure.Explicit,HostName = 'ftp.domain.com'
};

解决方法

控制和数据连接的IP地址不匹配

这是来自FileZilla FTP服务器的消息。这是一种安全措施。它可能表明您的应用服务实例的外部IP地址在传输过程中发生了变化。或者,当然,这可能表明您的连接已被劫持(这是服务器试图检测到的)。

与WinSCP无关。

我不知道Azure应用程序服务的IP地址是否可以某种方式固定。如果没有,您所能做的就是重新连接并重试传输。我相信任何FTP客户端都会遇到相同的问题。也许使用IPv6连接,就不会发生此问题。但是我不确定,这只是一个疯狂的猜测。尽管您不能通过WinSCP强制使用IPv6(只能通过完全禁用IPv4,但是我不知道使用应用程序服务是否还可以这样做)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...