sshnet / sshnet/SSH.NET

Renci.SshNet.Common.SshException: Failure. exception

Aperta
#582 8 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
C#
Stelle
4.4k
Fork
993
Merge medio
9g 21h
PR unite (30g)
1

Descrizione

Hello,

I have been using the Renci SSH.NET(2016.1.0.0) NuGet package in my web api code, to transfer files from server to a remote SFTP server. This has been working very well for me. The issue I am facing is that I am getting the error marked below. My .NET framework version is 4.6

An exception has been caught during the file upload..:Renci.SshNet.Common.SshException: Failure.
at Renci.SshNet.Sftp.SftpSession.RequestOpen(String path, Flags flags, Boolean nullOnError)
at Renci.SshNet.SftpClient.InternalUploadFile(Stream input, String path, Flags flags, SftpUploadAsyncResult asyncResult, Action1 uploadCallback) at Renci.SshNet.SftpClient.UploadFile(Stream input, String path, Action1 uploadCallback)
at BASF.TAR.RMSService.Controllers.AttachmentController.Get(String sourcepaths, String destinationpath) in d:\Projects\TAR\Samples\BASF.TAR.RMSService\BASF.TAR.RMSService\Controllers\AttachmentController.cs:line 47

I am using the code in my controller as below, its a simple function that takes a source path which is pipe seperated strings and a destination path which is the path on the remote FTP server. The client opens the connection to the server and then in a loop manner each file is uploaded to the remote server and the log is printed.

Please can you let me know why this error is occuring sometimes, any help would be greatly appreciated

public IHttpActionResult Get([FromUri]string sourcepaths, string destinationpath)
        {
            var fileInfo = new List<string>();

            log.Info("Entering the Put() method of the AttachmentController class..");
            try
            {
                using (SftpClient sftp = new SftpClient(ConfigurationManager.AppSettings["SFTP"].ToString(), Convert.ToInt32(ConfigurationManager.AppSettings["Port"].ToString()), ConfigurationManager.AppSettings["UserId"].ToString(), ConfigurationManager.AppSettings["Password"].ToString()))
                {
                    try
                    {
                        if (string.IsNullOrEmpty(sourcepaths) && string.IsNullOrEmpty(destinationpath)) return Ok();

                        var filePaths = sourcepaths.Split('|');
                        sftp.Connect();
                        log.InfoFormat("Connected to SFTP server:{0}..", ConfigurationManager.AppSettings["SFTP"].ToString());
                        
                        log.InfoFormat("Original destination path:{0}", destinationpath);
                        log.InfoFormat("Upload path in the sftp location:{0}", OriginalAttPathToFileSharePath(destinationpath.ToLower()));

                        log.Info("Uploading file...");

                        sftp.ChangeDirectory(OriginalAttPathToFileSharePath(destinationpath.ToLower()));
                        log.InfoFormat("Original destination path:{0}", destinationpath);
                        log.InfoFormat("Upload path in the sftp location:{0}", OriginalAttPathToFileSharePath(destinationpath.ToLower()));
                        foreach (var file in filePaths)
                        {
                            log.InfoFormat("File to be uploaded:{0}", file);
                            using (var stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
                            {
                                sftp.UploadFile(stream, Path.GetFileName(file), (o) =>
                                {
                                    Console.WriteLine(o);
                                });
                            }
                        }
                        log.Info("File uploaded to server...");
                        sftp.Disconnect();
                    }
                    catch (Exception e)
                    {
                        log.ErrorFormat("An exception has been caught during the file upload..:{0}", e);
                    }
                }
            }
            catch (Exception exp)
            {
                log.Error("Error occured in the Put() method of the AttachmentController class..", exp);
            }
            log.Info("Exiting the Put() method of the AttachmentController class..");
            return Ok();
        }

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Iniziare con la chiamata SftpClient.UploadFile e la voce dello stack SftpSession.RequestOpen mostrati nel report, quindi esaminare il flusso ChangeDirectory e dei caricamenti ripetuti del controller. Riprodurre il problema intermittente utilizzando i dettagli indicati di .NET Framework 4.6 e SSH.NET 2016.1.0.0, con percorsi equivalenti. Il lavoro è completato quando è stata identificata una causa riproducibile oppure mancano le informazioni sul server o sui percorsi necessarie per procedere.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
csharp
Ambito
networking
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Da chiarire
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.