0

I have to upload some files on a FTP who use TLS with my C# application ( .net 3.5 ) With Filezila, no problems.

Now, with my C# code, i have a timeout exception and i really don't know why because all is ok with Filezila.

Here is my code :

    public static bool AcceptAllCertificatePolicy(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        return true;
    }

    public static string Upload_SSL(string filenameSrc)
    {

        ServicePointManager.ServerCertificateValidationCallback = AcceptAllCertificatePolicy;

        FileInfo fileInfSrc = new FileInfo(filenameSrc);
        FtpWebRequest reqFTP;

        // Create FtpWebRequest object from the Uri provided
        if (strDirectory.Trim() != "")
        {
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + strHost.Trim() + "/" + strDirectory.Trim() + "/" + fileInfSrc.Name.Trim()));
        }
        else
        {
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + strHost.Trim() + "/" + fileInfSrc.Name.Trim()));
        }

        reqFTP.EnableSsl = true;

        // Provide the WebPermission Credintials
        reqFTP.Credentials = new NetworkCredential(strUser.Trim(), strPass.Trim());

        reqFTP.Proxy = null;

        // By default KeepAlive is true, where the control connection is not closed
        // after a command is executed.
        reqFTP.KeepAlive = false;

        // Specify the command to be executed.
        reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

        // Specify the data transfer type.
        reqFTP.UseBinary = true;

        // Notify the server about the size of the uploaded file
        reqFTP.ContentLength = fileInfSrc.Length;

        // The buffer size is set to 8kb
        int buffLength = 8192;
        byte[] buff = new byte[buffLength];
        int contentLen;

        // Opens a file stream (System.IO.FileStream) to read the file to be uploaded
        FileStream fs = fileInfSrc.OpenRead();

        try
        {
            // Stream to which the file to be upload is written
            Stream strm = reqFTP.GetRequestStream();

            // Read from the file stream 2kb at a time
            contentLen = fs.Read(buff, 0, buffLength);


            // Till Stream content ends
            while (contentLen != 0)
            {
                // Write Content from the file stream to the FTP Upload Stream
                strm.Write(buff, 0, contentLen);
                contentLen = fs.Read(buff, 0, buffLength);
            }

            // Close the file stream and the Request Stream
            strm.Close();
            fs.Close();
        }
        catch (Exception ex)
        {
            fs.Close();
            return (ex.Message);
        }

        return "ok";
    }

Now, the call :

        myFtp.Class1.strHost = "ftp://XXXXXXXXXXXXX";
        myFtp.Class1.strPass = "*****************";
        myFtp.Class1.strUser = "*********";
        myFtp.Class1.nPort = 21;
        myFtp.Class1.Upload_SSL(@"D:\Test.txt");

As information, if i try to use my code in order to upload a file on a NON TLS/SLL server, all is ok. So the problem appear to be only for the TLS/SSL ftp.

Anyone have some ideas please ?

Thanks a lot,

Walter Fabio Simoni
  • 5,671
  • 15
  • 55
  • 80
  • Show us an exact exception message and its callstack (or even better an [FtpWebRequest log](http://stackoverflow.com/q/9664650/850848)) + Post a FileZilla log file. – Martin Prikryl Nov 28 '16 at 15:42
  • Oo i made a mistake on my host...i kepot the FTP:// so the url was FTP://FTP:/xxxxx. By the way, after correcting this i have another exception ;: ""The remote server return an error : 234 AUTH TLS OK.\r\n."' – Walter Fabio Simoni Nov 28 '16 at 15:53
  • Then we need the [FtpWebRequest log](http://stackoverflow.com/q/9664650/850848) + Edit your question title and text for the new exception. – Martin Prikryl Nov 28 '16 at 16:07
  • I will create a new question now – Walter Fabio Simoni Nov 28 '16 at 16:19

1 Answers1

0

I kept the FTP:// in the host, so the url was FTP://FTP:/xxxxx

Bhargav Rao
  • 50,140
  • 28
  • 121
  • 140
Walter Fabio Simoni
  • 5,671
  • 15
  • 55
  • 80