none
Chiudere la connessione ftp in un WebClient RRS feed

  • Domanda

  • Ciao, ho questo codice che effettua un upload in un mio ftp:

    using (var client = new WebClient())
    {
        string cFile = "nomefile.pdf";
        client.Credentials = new NetworkCredential("myuser", "mypassword");
        client.UploadFile("ftp://192.168.0.99/" + cFile, WebRequestMethods.Ftp.UploadFile, cFile);                         
    }
    

    funziona perfettamente, ma ogni volta che lo uso non chiude la connessione al termine. Non riesco a trovare il modo di forzare la chiusura. Potete aiutarmi?
    Grazie.

                             Francesco

    martedì 5 ottobre 2021 10:09

Risposte

  • Ciao,

    io uso questo:

    namespace InviaFileFTP
    {
        class Program
        {
            static void Main(string[] args)
            {
                InviaFTP(@"D:\install.txt");
            }
            static void InviaFTP(string percorsoFile)
            {            
                //se esiste già, viene sovrascritto!!!
                
                string nomeFile = Path.GetFileName(percorsoFile);
    
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.tuosito.it/cartella/" + nomeFile);
                request.Credentials = new NetworkCredential("username@tuosito.it", "password");
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.KeepAlive = false; //chiude la connessione dopo il response
    
                byte[] fileContents;
                using (StreamReader sourceStream = new StreamReader(percorsoFile))
                {
                    fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                }
    
                request.ContentLength = fileContents.Length;
    
                using (Stream requestStream = request.GetRequestStream())
                {
                    requestStream.Write(fileContents, 0, fileContents.Length);
                }
    
                using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
                {
                    Console.WriteLine($"\n{DateTime.Now.ToLocalTime()}\nInvio file {nomeFile} (al sito web): status {response.StatusDescription}\n");
                }            
            }
        }
    }
    

    • Contrassegnato come risposta Francesco Leo mercoledì 6 ottobre 2021 05:56
    martedì 5 ottobre 2021 18:33

Tutte le risposte

  • Salve Francesco,

    Hai già visto questo articolo su close method?


    Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    martedì 5 ottobre 2021 10:40
    Moderatore
  • Da quanto leggo chiude lo stream dei dati, non la connessione, che è quello che vorrei fare io, o forse sbaglio?
    martedì 5 ottobre 2021 10:48
  • Penso la stessa metodologia può essere anche usata per chiudere la connessione, tipo cosi:

    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(GetFtpUriString(myDir)); request.Method = WebRequestMethods.Ftp.PrintWorkingDirectory; request.Credentials = new NetworkCredential(myFtpsUsername, myFtpsPassword); request.EnableSsl = true; request.ConnectionGroupName = myConnectionGroupName; request.KeepAlive = false; FtpWebResponse response = (FtpWebResponse)request.GetResponse(); response.Close();


    Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.



    martedì 5 ottobre 2021 10:56
    Moderatore
  • Ma FtpWebRequest ha il metodo Close, WebClient, che uso io, no. Come lo implemento? Forse faccio prima ad utilizzare un altro modo di fare l'upload.
    martedì 5 ottobre 2021 11:01
  • Forse, però prima di cambiar tutto (su Virtual Machine, mi raccomando), vediamo se altro utente può darti un consiglio migliore.

    Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    martedì 5 ottobre 2021 11:09
    Moderatore
  • Ciao,

    io uso questo:

    namespace InviaFileFTP
    {
        class Program
        {
            static void Main(string[] args)
            {
                InviaFTP(@"D:\install.txt");
            }
            static void InviaFTP(string percorsoFile)
            {            
                //se esiste già, viene sovrascritto!!!
                
                string nomeFile = Path.GetFileName(percorsoFile);
    
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.tuosito.it/cartella/" + nomeFile);
                request.Credentials = new NetworkCredential("username@tuosito.it", "password");
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.KeepAlive = false; //chiude la connessione dopo il response
    
                byte[] fileContents;
                using (StreamReader sourceStream = new StreamReader(percorsoFile))
                {
                    fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                }
    
                request.ContentLength = fileContents.Length;
    
                using (Stream requestStream = request.GetRequestStream())
                {
                    requestStream.Write(fileContents, 0, fileContents.Length);
                }
    
                using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
                {
                    Console.WriteLine($"\n{DateTime.Now.ToLocalTime()}\nInvio file {nomeFile} (al sito web): status {response.StatusDescription}\n");
                }            
            }
        }
    }
    

    • Contrassegnato come risposta Francesco Leo mercoledì 6 ottobre 2021 05:56
    martedì 5 ottobre 2021 18:33
  • Ciao Fabio, è lo stesso metodo che alla fine ho implementato io e chiude tutto correttamente.
    Grazie.
    mercoledì 6 ottobre 2021 05:56