none
Error en el proceso de validación de la conexión SFTP y Subida de Archivos RRS feed

  • Pregunta

  •   

    En el siguiente código tengo un error y quisiera que me ayudaran por favor a dar con la falla.

    Tengo dos procedimientos y una función en el proyecto. En el procedimiento timer1 realiza un decremento de un minuto y luego de trascurrido verifica el tipo de conexión si es FTP o SFTP, además  si hay conexión y seguido de ello llama al procedimiento UpLoadFtp_Sftp que este a su ves envía parámetros a una función llamada UpLoadSFtp para luego de verificar procede a la subida de archivos a un servidor remoto por SFT.

    El problema es que luego de trascurrido el minuto que debe verificar si hay conexión con el servidor sigue al siguiente proceso y no espera que responda el servidor sino que el contador continua en segundo plano arroja el error y el contador no se detiene. 

    Debería revisar si no hay conexión mostrar el mensaje de error y posteriormente seguir nuevamente con el decremento del minuto hasta que aya conexión y recién es que va a proceder a realizar la subida de los archivos.  


    private void timer1_Tick(object sender, EventArgs e)
            {
                LblStatusEnvio();


                if (WMin == 0 & WSeg == 0)
                { 
                    UpLoadFtp_Sftp(WHost38, WUser38, WPass38, WPort38, WTCnx38, @"D:\xxx\xxxx\xxxx\", "./aaa/", "xxxxxxxx", "99");

                    IniciarVariables();
                }
                else
                {
                    WSeg = WSeg - 1;
                    if (WSeg == -1)
                    {
                        WMin = WMin - 1;
                        WSeg = 59;
                    }

                }
            }


    **////


     private void UpLoadFtp_Sftp(string xHost, string xUser, string xPass, int xPort, string xTCnx, string xLocal, string xRemoto, string xObservacion, string xIdObs )
            {
                //var txtFiles = Directory.EnumerateFiles(xLocal, "*.*");
                var txtFiles = Directory.GetFiles(xLocal, "*.*");

                int w = 0;
                foreach (string currentFile in txtFiles) 
                {
                    if (w == 0)

                 {    

                    string fileName = currentFile.Substring(xLocal.Length);

                    textBox1.Text = "ARchivo econtrado: " + fileName + "\r\n";

                    //Validar Tipo Conexion
                    if (xTCnx == "FTP")
                    {
                        RptaFn = UpLoadFtp(xHost, xUser, xPass, xPort, xLocal + fileName, xRemoto);
                    }
                    else if (xTCnx == "SFTP")
                    {
                        RptaFn = UpLoadSFtp(xHost, xUser, xPass, xPort, xLocal + fileName, xRemoto);
                    }
                    else
                    {
                        textBox1.Text = "Error Tipo de Conexion: " + fileName + "\r\n";
                        //Thread.Sleep(2000);
                        //Console.ReadKey();
                        w = 1;
                        textBox1.Text = " ";
                        IniciarVariables();
                        return;

                    }
                    //Fin Validar Tipo Conexion

                    if (RptaFn == "OK")
                    {
                        textBox1.Text = textBox1.Text + RptaFn + "\r\n";
                    }
                    else
                    {
                        textBox1.Text = textBox1.Text + RptaFn + "\r\n";
                        //Console.ReadKey();
                        //Thread.Sleep(2000);
                        textBox1.Text = " ";
                        IniciarVariables();
                        return;
                    }
                }

              }
            }

    **///





        static string UpLoadSFtp(string fHost, string fUser, string fPass, int fPort, string fFileLocal, string fFileRemoto)
            {
                try
                {
                    SessionOptions sessionOptions = new SessionOptions
                    {
                        Protocol = Protocol.Sftp,
                        HostName = fHost,
                        UserName = fUser,
                        Password = fPass,
                        PortNumber = fPort,
                        GiveUpSecurityAndAcceptAnySshHostKey = true
                    };
                    //Conexion
                    Session session = new Session();
                    session.Open(sessionOptions);
                    if (session.Opened)
                    {
                        TransferOptions transferOptions = new TransferOptions();
                        transferOptions.TransferMode = TransferMode.Binary; // El modo de transferencia - Automático, Binario o Ascii
                        transferOptions.FilePermissions = null;             // Permisos aplicados a archivos remotos
                        transferOptions.PreserveTimestamp = false;          // Establecer el último tiempo de escritura del archivo de destino
                        // a la del archivo de origen: básicamente cambia la marca de tiempo 
                        // para que coincida con los archivos de destino y de origen.
                        transferOptions.ResumeSupport.State = TransferResumeSupportState.Off;

                        TransferOperationResult transferResult;
                        // la lista de parámetros es: ruta remota, ruta local con nombre de archivo
                        // (opcional - si es diferente de la ruta remota), ¿Eliminar archivo de origen? Opciones de transferencia

                        transferResult = session.PutFiles(fFileLocal, fFileRemoto, true, transferOptions);

                        transferResult.Check();
                        session.Close();
                        return "OK";
                    }
                    else
                    {
                        return "!Error: No se pudo Conectar al FTP: ";
                    }
                }
                catch (Exception ex)
                {
                    return ex.ToString();
                }
            }

                                                  
    • Tipo cambiado Emgybyte lunes, 4 de marzo de 2019 12:53 Equivocación
    • Editado Emgybyte lunes, 4 de marzo de 2019 13:04
    lunes, 4 de marzo de 2019 12:51

Todas las respuestas

  • Hola  

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que estaremos realizando una revisión a profundidad acerca del inconveniente que se te está presentando.

    Proporcionaremos una respuesta lo más pronto posible.

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    martes, 5 de marzo de 2019 22:13
    Moderador