Azure Function SSH.Net套接字读取操作已超时

时间:2018-10-13 22:19:34

标签: c# azure sftp azure-functions

我正在尝试从定时的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次成功。

0 个答案:

没有答案