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 действительно старый.