sshnet / sshnet/SSH.NET

SSH.NET - Socket read operation has timed out after 30000 milliseconds.

Aperta
#889 1 commento 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

Hi @drieseng I'm getting issue also on my SFTP setup using the SSH.NET latest version using .NET 5.0. It works fine until I got this issue.

Socket read operation has timed out after 30000 milliseconds.

This is my current code.

using (SftpClient sftpClient = new SftpClient(await getSftpConnection(export.Schedule.Host,
export.Schedule.Username,
export.Schedule.Password,
export.Schedule.KeyFile,
export.Schedule.Parapharase,
export.Schedule.LogonType, log)))

    {
        try
        {
            if (!sftpClient.IsConnected)
            {
                log.LogInformation($"Connecting Sftp....");
                do
                {
                    try
                    {
                        sftpClient.Connect();
                    }
                    catch (Renci.SshNet.Common.SshConnectionException e)
                    {
                        log.LogInformation($"Connection error: {e.Message}");
                    }
                } while (!sftpClient.IsConnected);

                log.LogInformation($"Done connecting Sftp");
            }
                    //Send file per devicename
                    foreach (var _perDevice in export.ExportTablePerDevice)
                    {
                        log.LogInformation($"Device {_perDevice.DeviceName}");
                        try
                        {
                            var csv = export.Schedule.Layout.Equals("LAYOUT 05") ? ReportHelper.ConvertToDat(export.ExportTable) :
                                ReportHelper.ConvertToCsv(_perDevice.ExportTable, export.Schedule.Layout, _perDevice.TopUserHeader);

                            var stream = ZipArchiveExtensions.GenerateStreamFromString(csv);

                            string filename = "";
                            if (export.IsExportDevices)
                            {
                                filename = _perDevice.DeviceName.Replace(@"/", "_") + "_" + DateTime.Now.Ticks + "." + export.Schedule.ExportFormat.ToLower() ?? "csv";
                            }
                            else
                            {
                                    filename = (!String.IsNullOrEmpty(export.Schedule.FileName) ? export.Schedule.FileName.Replace(@"/", "_").Replace("#tick", DateTime.Now.Ticks.ToString()) :
                                       _perDevice.DeviceName.Replace(@"/", "_") + DateTime.Now.Ticks) + "." + export.Schedule.ExportFormat.ToLower() ?? "csv";
                            }
                            var file = $"/{export.Schedule.FilePath}/{filename}";
                            await sftpClient.UploadAsync(stream, file);
                        }
                        catch (Exception ex)
                        {
                            sftpClient.Disconnect();
                            sftpClient.Dispose();
                            log.LogInformation($"Device error: {ex.Message}");
                        }
                    }
            sftpClient.Disconnect();
            response = new StatusCodeResponse()
            {
                Code = HttpStatusCode.OK.ToString(),
                HttpStatus = (int)HttpStatusCode.OK,
                Message = $"Successfully sent export {export.Schedule.Name} via sftp server"
            };

        }
        catch (Exception ex)
        {
            sftpClient.Disconnect();
            log.LogInformation($"An exception has been caught {ex.Message}");
            response = new StatusCodeResponse()
            {
                HttpStatus = (int)HttpStatusCode.InternalServerError,
                Code = HttpStatusCode.InternalServerError.ToString(),
                Message = $"Error sending export {export.Schedule.Name} via sftp server: {ex.Message}"
            };
        }
    }

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

Inizia con l'esempio C# fornito, concentrandoti su SftpClient.Connect e UploadAsync in relazione al timeout di lettura del socket di 30 secondi segnalato. Riproduci il problema con la configurazione SFTP .NET 5.0 descritta e determina le condizioni del server, della connessione o del caricamento che lo attivano; non sono indicati file del repository né test, quindi i criteri di completamento non sono ancora definiti.

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à
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
20/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.