我们使用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;
}
答案 0 :(得分:1)
SSH.NET在连接时超时(30秒后)。这可能是由于远程端没有响应..或中间的某些东西断开了连接。默认情况下,OpenSSH对传入连接的数量有限制,也许您是其中之一?一个tcpdump可以帮助确认。
发生此异常时,我将添加重试/延迟机制。为此,Polly是一个很棒的库,但也可能会显得过分杀伤力。 https://github.com/App-vNext/Polly