我正在使用SSH.NET库创建SFTP客户端。如果网络连接在此超时内再次可用,我需要恢复下载。我正在使用下面提到的方法,如许多示例所示。
PrivateKeyFile ObjPrivateKey = new PrivateKeyFile(keyStream);
PrivateKeyAuthenticationMethod ObjPrivateKeyAutentication = new PrivateKeyAuthenticationMethod(username, ObjPrivateKey);
var connectionInfo = new ConnectionInfo(hostAddress, port, username, ObjPrivateKeyAutentication);
try
{
using (var client = new SftpClient(connectionInfo))
{
client.ConnectionInfo.Timeout = TimeSpan.FromSeconds(10);
client.Connect();
if (!client.IsConnected)
{
return false;
}
if (!client.Exists(source))
{
return false;
}
var fileName = Path.GetFileName(source);
using (var fs = new FileStream(destination + fileName, FileMode.Create))
{
client.DownloadFile(source, fs, printActionDel);
fs.Close();
returnState = true;
}
client.Disconnect();
client.Dispose();
}
}
我正在拔下网线中断下载并测试超时情况。虽然我在超时内再次启用互联网连接以恢复下载,但它没有恢复。我在这里做错了什么?请提供建议。
1条答案
按热度按时间up9lanfz1#
如果您期望SSH. NET在
SftpClient.DownloadFile
内重新连接,它不会。您必须自己实现重新连接和传输恢复。
或者使用另一个本机支持简历的SFTP库。
例如,WinSCP .NET assembly确实会在其
Session.GetFiles
method中自动恢复。WinSCP GUI可以为您生成一个类似上面的SFTP下载代码模板。
还有另一种选择,它使用一个专用的"重试"库,如Polly:
Retry SFTP if it fails?