2015-10-19 112 views
2

我正在使用Renci.SshNet.Sftp连接到SFTP。当我尝试拨打sftpClientObject.Connect()时出现以下错误。请在下面找到错误。几天前它工作正常。检查了验证细节,它是完美的。C#Renci.SshNet.Sftp连接抛出ArgumentNullException

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

Error:
Value cannot be null.
Parameter name: At least one element in the specified array was null.

异常堆栈跟踪:

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); 

谁能帮助我如何解决这个问题?

感谢

+0

你能告诉我们异常stacktrace吗? –

+0

你确定没有'_hostName','_userName','_password'为空吗? –

+0

_hostName,_userName,_password不为空。 –

回答

3

看来,唯一可以想象的情况下,当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包真的很老。

相关问题