簡體   English   中英

C#Renci.SshNet.Sftp Connect引發ArgumentNullException

[英]C# Renci.SshNet.Sftp Connect throwing ArgumentNullException

我正在使用Renci.SshNet.Sftp連接到SFTP。 嘗試調用sftpClientObject.Connect()時出現以下錯誤。 請在錯誤下方找到。 幾天前工作正常。 檢查了身份驗證詳細信息,它是完美的。

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

錯誤:
值不能為空。
參數名稱:指定數組中的至少一個元素為null。

異常stacktrace:

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

誰能幫我解決這個問題?

謝謝

似乎唯一可以想象的情況是,當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軟件包確實很舊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM