C# Renci.SshNet.Sftp Connect throwing ArgumentNullException

本文关键字:throwing ArgumentNullException Connect Sftp Renci SshNet | 更新日期: 2023-09-27 18:18:24

我使用Renci.SshNet.Sftp连接到SFTP。当我尝试调用sftpClientObject.Connect()时,我得到以下错误。请查找下面的错误。几天前还能用着呢。检查了身份验证细节,它是完美的。

var _sftpClient = new SftpClient(_hostName, _userName, _password);
using (_sftpClient)
{
    _sftpClient.Connect();
    // Other code to follow
}

错误:
值不能为空。
参数名:指定数组中至少有一个元素为空。

异常异常堆栈:

   at System.Threading.WaitHandle.WaitAny(WaitHandle[] waitHandles, Int32 millisecondsTimeout, Boolean exitContext)
   at System.Threading.WaitHandle.WaitAny(WaitHandle[] waitHandles, TimeSpan timeout, Boolean exitContext)
   at System.Threading.WaitHandle.WaitAny(WaitHandle[] waitHandles, TimeSpan timeout)
   at Renci.SshNet.Session.WaitHandle(WaitHandle waitHandle)
   at Renci.SshNet.PasswordAuthenticationMethod.Authenticate(Session session)
   at Renci.SshNet.ConnectionInfo.Authenticate(Session session)
   at Renci.SshNet.Session.Connect()
   at Renci.SshNet.BaseClient.Connect()
   at SftpPoller.FileTransferClient.ProcessFilesInSftp(TextWriter log) in 

但是当我使用下面的代码时,它工作了:

var methods = new AuthenticationMethod[1];
methods[0] = new PasswordAuthenticationMethod(_userName, _password);
var con = new ConnectionInfo(_hostName, _userName, methods) {Timeout = new TimeSpan(0, 0, 0, 60)};
_sftpClient = new SftpClient(con);
谁能帮我解决这个问题?

谢谢

C# Renci.SshNet.Sftp Connect throwing ArgumentNullException

似乎唯一可以想象的场景,当PasswordAuthenticationMethod.Authenticate可以传递一个未初始化的等待句柄给WaitHandle.WaitAny时,会话关闭而身份验证正在进行。

如果会话由于超时而关闭,设置更高的超时可以解决问题,正如您发现的那样。

设置超时的更简单代码是:

var _sftpClient = new SftpClient(_hostName, _userName, _password);
_sftpClient.ConnectionInfo.Timeout = TimeSpan.FromSeconds(60);

你似乎在使用旧版本的SSH。. NET (NuGet中可能有2013.4.7版本)。由于在以后的版本中重构了代码的相关部分,因此升级也可能解决这个问题。作为NuGet SSH,无论如何都应该这样做。. NET包真的很旧