我正在尝试从定时的Azure功能连接到我有权访问但无法控制的第三方SFTP服务器。使用Azure函数模拟器时,我的函数在本地成功运行,但是尝试在Azure中运行时,我收到一个异常(“套接字读取操作在30000毫秒后超时。”)。
从网络的角度来看,我是否需要做任何事情来允许/设置出站SFTP连接,或者有人在下面的代码中看到任何错误吗?
var ftpHost = Environment.GetEnvironmentVariable("SFTP:Server");
var ftpUser = Environment.GetEnvironmentVariable("SFTP:User");
var ftpPass = Environment.GetEnvironmentVariable("SFTP:Password");
var ftpDirectory = Environment.GetEnvironmentVariable("SFTP:WorkingDirectory");
log.Info($"Connecting to {ftpHost}"); //This outputs the correct values I would expect from my app settings
using (var sftp = new SftpClient(ftpHost, ftpUser, ftpPass))
{
sftp.Connect(); //This throws the exception
log.Info("Connected");
var files = sftp.ListDirectory(ftpDirectory);
log.Info("Directory listing successful");
var exceptions = new List<Exception>();
foreach (var file in files.Where(f => f.IsRegularFile))
{
try
{
log.Info($"{file.FullName} - {file.LastWriteTimeUtc}");
var records = Process(sftp, file);
log.Info($"Parsed {records.Count} records");
sftp.DeleteFile(file.FullName);
log.Info($"Deleted {file.FullName}");
}
catch (Exception ex)
{
exceptions.Add(ex);
}
}
if (exceptions.Any())
{
throw new AggregateException(exceptions);
}
}
修改 我确实将失败的代码留在那儿,失败似乎是间歇性的。每15分钟运行一次,我的成功率大约为50%。在最近的20次尝试中,有10次成功。