C# Renci.SshNet.Sftp Соединение, выбрасывающее ArgumentNullException

Я использую 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);

Может кто-нибудь помочь мне, как решить эту проблему?

Спасибо

1 ответ

Кажется, что единственный мыслимый сценарий, когда PasswordAuthenticationMethod.Authenticate может передать неинициализированный дескриптор ожидания WaitHandle.WaitAny это когда сеанс закрыт, пока идет аутентификация.

Если сеанс закрыт из-за тайм-аута, установка более высокого тайм-аута может решить проблему, как вы уже обнаружили.

Более простой код для установки времени ожидания:

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

Похоже, вы используете старую версию SSH.NET (возможно, версию 2013.4.7, доступную в NuGet). Поскольку соответствующая часть кода была реорганизована в более поздних версиях, обновление также может решить эту проблему. Вы должны сделать это в любом случае, так как пакет NuGet SSH.NET действительно старый.

Другие вопросы по тегам