0
votes

I have write code for transfer file from FTP server to local server and after transfer 2 or 3 files it throwing exception error The remote server returned an error: 150 Opening data channel for file download

All File transfered successfully in FileZila but error coming in asp.net application.

I do the following code

protected string TransferFile(string strPath, string strFtpPath, string strFtpUser, string strFtpPwd, string strSubClientFTPPath, string strSubClientFTPUser, string strSubClientFTPPwd, string strFileName, string strConvFileName, string strFileSize)
    {
        string strSuccess = "";
        FtpWebRequest reqFTP;
        try
        {

            Double Size = 0;
            string strLocalFileSize = "";
            if (File.Exists(strPath + strConvFileName))
            {
                Size = ((Math.Round(Convert.ToDouble(new FileInfo(strPath + strConvFileName).Length)) > 0 && Math.Round(Convert.ToDouble(new FileInfo(strPath + strConvFileName).Length)) < 1024) ? 1 : (Math.Round(Convert.ToDouble(new FileInfo(strPath + strConvFileName).Length) / 1024 + 0.0001)));
                strLocalFileSize = Size + "KB";
            }
            if (!File.Exists(strPath + strConvFileName) || strFileSize != strLocalFileSize)
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFtpPath + strFileName.Replace("#", "%23")));
                System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
                reqFTP.EnableSsl = true;
                reqFTP.Timeout = Timeout.Infinite;
                reqFTP.KeepAlive = true;
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                //reqFTP.UseBinary = true;
                //reqFTP.UsePassive = false;
                reqFTP.Credentials = new NetworkCredential(strFtpUser, strFtpPwd);
                //   lblTransferredFile.Text = "Transferring " + strFileName + "  ......";
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                long cl = response.ContentLength;
                int bufferSize = 2048;
                int readCount;
                byte[] buffer = new byte[bufferSize];
                //  lblTransferredFile.Text = "Transferring " + strFileName + "  ......";
                readCount = ftpStream.Read(buffer, 0, bufferSize);
                //if (readCount > 0)
                //{
                FileStream outputStream = new FileStream(strPath +
                                                         strConvFileName, FileMode.Create);
                while (readCount > 0)
                {
                    outputStream.Write(buffer, 0, readCount);
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }

                ftpStream.Close();
                outputStream.Close();
                response.Close();
                strSuccess = "";

            }
            else
            {
                strSuccess = "File Exists";
            }
        }
        catch (Exception ex)
        {
            strSuccess = ex.Message;
            ClientScript.RegisterStartupScript(this.GetType(), "strScript", "<script>alert('" + ex.Message.Trim().Replace("'", "") + "');</script>");
        }

        return strSuccess;
    }
1
Exception throw in this line FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); - Daya Ram

1 Answers

0
votes

I've encountered this today after installing kb 4519976. Uninstalling this KB solved the problem. Could you check if this is also the solution in your case.

Context was an ftps tls 1.2 ECHDE connection which fails at the stage where the extra connection is started.