Renci.SshNet:在30000毫秒内建立连接失败

时间:2019-06-06 22:29:32

标签: c# linux ssh .net-core

我们使用SFTP位置的Renci.SshNet,每小时生成100个CSV文件。一切正常,但是从最近几天开始,我们经常看到连接失败错误。

每天/每天都不会发生此错误,它会随机出现,并且在大多数情况下,生成文件没有问题。从过去90天的日志中,我看到此错误发生了30次。

  

Renci.SshNet:在30000范围内建立连接失败   毫秒。

Renci.Net中是否有一个属性可以增加超时时间,或者是否有其他逻辑可以继续尝试建立连接直到成功?或从编码方面获得最佳处理方法的建议将不胜感激。

    private ConnectionInfo CreateConnectionInfo(string host, int port, string userName, string password)
    {
        return new ConnectionInfo(host, port, userName, new AuthenticationMethod[] { new PasswordAuthenticationMethod(userName, password), });
    }        

    private SftpClient CreateSFTPClient(string host, int port, string userName, string password)
    {   
        SftpClient sftp = new SftpClient(this.CreateConnectionInfo(host, port, userName, password));
        sftp.Connect();
        return sftp;
    }

    public bool UploadFile(string host, int port, string userName, string password, string filePath, byte[] fileBytes, bool checkFileExist = false)
    {
        bool isUploaded = false;
        using (SftpClient sftpClient = this.CreateSFTPClient(host, port, userName, password))
        {
            try
            {  
                  sftpClient.WriteAllBytes(filePath, fileBytes);
                  isUploaded = true;                 
            }
            catch (Exception ex)
            {
                 throw;
            }
            finally
            {
                sftpClient.Disconnect();
            }
        }

        return isUploaded;
    }

1 个答案:

答案 0 :(得分:1)

SSH.NET在连接时超时(30秒后)。这可能是由于远程端没有响应..或中间的某些东西断开了连接。默认情况下,OpenSSH对传入连接的数量有限制,也许您是其中之一?一个tcpdump可以帮助确认。

发生此异常时,我将添加重试/延迟机制。为此,Polly是一个很棒的库,但也可能会显得过分杀伤力。 https://github.com/App-vNext/Polly