问题描述
我已经使用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,但是我不知道使用应用程序服务是否还可以这样做)。