150 Открытие канала данных для файла Скачать с сервера - PullRequest
1 голос
/ 09 октября 2019

Я создаю приложение для передачи файлов, используя ASP.net с C #, в котором я передаю файлы с FTP-сервера на сервер. это работает нормально с прошлых 5 лет, но после этого теперь я получаю ошибку ниже.

Удаленный сервер возвратил ошибку: 150 Открытие канала данных для загрузки файла с сервера

enter image description here

И код, который я использую, ниже

     private string script = @"setTimeout(""__doPostBack('{0}','')"", 3000);";
    protected int totalSteps = (intCount == 0 ? 1 : intCount);
    private int blockWidth = 860 / (intCount == 0 ? 1 : intCount);
    private string styles = @"
            <style type=""text/css"">
                .Hide {{ display:none; }}
                .ProgressWrapper {{ height:18px; width:{0}px; 
                        border:solid 1px #9C9C9C;font-size:9pt; padding:5px; background-color:#ddd; }}
                .Progress {{ height:15px; background-color:#0059FF; 
                        border:solid 1px #003EB0; float:left; }}
            </style>
        ";

    public bool Processing
    {
        get
        {
            return (bool)(Session["Processing"] ?? false);
        }
        set
        {
            Session["Processing"] = value;
        }
    }
    public int Step
    {
        get
        {
            return (int)(Session["Step"] ?? 0);
        }
        set
        {
            Session["Step"] = value;
        }
    }
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        if (this.Processing)
        {
            if (!string.IsNullOrEmpty(this.LastStatus))
            {
                this.pnlProgress.Width = new Unit(this.Step * this.blockWidth);
                if (this.Status == "Transfer" || this.Status == "Delete")
                {
                //some controls logic
                }
                if (this.Status == "TransferA" || this.Status == "DeleteD")
                {
                    fBindClientGrid(this.FTPP, this.Label);
                 //some controls logic
                }
                this.lblMessage.Text += string.Format("<br />{0}", this.LastStatus);
                this.LastStatus = string.Empty;
            }
            if (Session["ID"] == null)
                ScriptManager.RegisterStartupScript(this, this.GetType(),
                    this.GetType().Name, string.Format(script, this.upnlCustomer.UniqueID),
                    true);
        }
        else
        {
            if (!this.Completed)
            {
                this.pnlProgress.Width = new Unit(860);
                if (this.Status == "TransferA" || this.Status == "DeleteD")
                {
                    fBindClientGrid(this.FTPP, this.Label);
                }
                fBindSubClientGrid(strTodaysDate);
                this.lblMessage.Text += string.Format("<br />{0}", this.LastStatus);
                lblMessage.Text += "<br />Processing Is Completed  At " + DateTime.Now.ToString("HH:mm:ss") + "";
                lblTransferStatus.Text = strfinalstatus;
             }
            else
            {
                             this.Step = 0;
            }
        }

    }


 void SomeLongOperation()
    {
        this.Completed = false;

        List<string> lstArray = new List<string>();

        rdrCustomerCredentials.Close();
        rdrCustomerCredentials.Dispose();

        CreateFolder(strPath, strClientpath, strClientUser, strClientPwd, strTodaysDate);
        if (txtBatchName.Text.Trim().Replace("&", "").Replace("%", "").Replace("/", "").Replace(@"\", "").Replace("*", "").Replace(":", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", "").Replace("'", "''").Replace("é", "e") != strTodaysDate.Replace(ddlSubClient.SelectedValue.Split('^')[0], ""))
        {
            CreateFolder((strPath + strTodaysDate + "/"), strClientpath + strTodaysDate + "/", strClientUser, strClientPwd, txtBatchName.Text.Trim().Replace("&", "").Replace("%", "").Replace("/", "").Replace(@"\", "").Replace("*", "").Replace(":", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", "").Replace("é", "e"));
        }

        if (mySql.pReturnIntegerValue("SELECT COUNT(*) FROM CMTB****hMaster WHERE BatchName='" + txtBatchName.Text.Trim().Replace("&", "").Replace("%", "").Replace("/", "").Replace(@"\", "").Replace("*", "").Replace(":", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", "").Replace("'", "''").Replace("é", "e") + "' AND MTSubClientID=" + intSubClientID + " AND FolderName='" + strTodaysDate + "'") == 0)
        {

            strResult = ""; // here i add some operation to save data into my database
        }

        int i = 0;
        intCount = (gvCustomer.Rows.Count == 0 ? 1 : gvCustomer.Rows.Count);
        if (strResult == "")
        {
            for (int intLoop = 0; intLoop < gvCustomer.Rows.Count; intLoop++)
            {
                if (((CheckBox)gvCustomer.Rows[intLoop].Cells[0].FindControl("chkSelect")).Checked == true && ((LinkButton)gvCustomer.Rows[intLoop].Cells[2].FindControl("lnkLink")).Text.ToLower().Trim().Replace("\r\n", "").Replace("\n", "").Replace("//", "/").Contains(".ds2") == false && ((CheckBox)gvCustomer.Rows[intLoop].Cells[0].FindControl("chkSelect")).Enabled == true)
                {
                    i++;
                    string strFileName = ((LinkButton)gvCustomer.Rows[intLoop].Cells[2].FindControl("lnkLink")).Text.Trim().Replace("\r\n", "").Replace("\n", "").Replace("//", "/");

                    string strConvFileName = ((TextBox)gvCustomer.Rows[intLoop].Cells[3].FindControl("txtConvertedFile")).Text.Trim().Replace("\r\n", "").Replace("\n", "").Replace("//", "/").Replace("  ", "").Replace("~", "-").Replace("é", "e");

                    this.Step = this.Step + 1;
                    if (txtBatchName.Text.Trim().Replace("&", "").Replace("%", "").Replace("/", "").Replace(@"\", "").Replace("*", "").Replace(":", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", "").Replace("é", "e") != strTodaysDate.Replace(ddlSubClient.SelectedValue.Split('^')[0], ""))
                    {
                        strResult = RecursiveDownload((strPath + strTodaysDate + "/" + txtBatchName.Text.Trim().Replace("&", "").Replace("%", "").Replace("/", "").Replace(@"\", "").Replace("*", "").Replace(":", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", "").Replace("é", "e") + "/"), strCustomerpath, strUser, strPwd, strClientpath + strTodaysDate + "/" + txtBatchName.Text.Trim().Replace("&", "").Replace("%", "").Replace("/", "").Replace(@"\", "").Replace("*", "").Replace(":", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", "") + "/", strClientUser, strClientPwd, strFileName, strConvFileName, gvCustomer.Rows[intLoop].Cells[4].Text, gvCustomer.Rows[intLoop].Cells[5].Text);
                        strInputPath = strInpPath + strTodaysDate + "/" + txtBatchName.Text.Trim().Replace("&", "").Replace("%", "").Replace("/", "").Replace(@"\", "").Replace("*", "").Replace(":", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", "").Replace("é", "e") + "/";
                    }
                    else
                    {
                        strResult = RecursiveDownload((strPath + strTodaysDate + "/"), strCustomerpath, strUser, strPwd, strClientpath + strTodaysDate + "/", strClientUser, strClientPwd, strFileName, strConvFileName, gvCustomer.Rows[intLoop].Cells[4].Text, gvCustomer.Rows[intLoop].Cells[5].Text);
                        strInputPath = strInpPath + strTodaysDate + "/";
                    }

                    string status = string.Format("Step {0} - {1}", i,
    strResult == "" ? "Successfully Transferred " + strFileName + " at " + DateTime.Now.ToString("HH:mm:ss") : "Failed " + strFileName + " - Due to {" + strResult.Replace("'", "") + "}");
                    string status1 = "";
                    if (txtBatchName.Text.Trim().Replace("&", "").Replace("%", "").Replace("/", "").Replace(@"\", "").Replace("*", "").Replace(":", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", "").Replace("'", "''").Replace("é", "e") != strTodaysDate.Replace(ddlSubClient.SelectedValue.Split('^')[0], ""))
                    {
                        status1 = string.Format("Step {0} - {1}", i,
                            strResult == "" ? "Successfully Transferred " + strFileName + " From " + (strCustomerpath) + " To " + strPath + strTodaysDate + "/" + txtBatchName.Text.Trim().Replace("&", "").Replace("%", "").Replace("/", "").Replace(@"\", "").Replace("*", "").Replace(":", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", "").Replace("'", "''").Replace("é", "e") + "/" + " at " + DateTime.Now.ToString("HH:mm:ss") + " \n\r  \n\r" : "Failed " + strFileName + " - Due to {exception details}  \n\r  \n\r");
                    }
                    else
                    {
                        status1 = string.Format("Step {0} - {1}", i,
                            strResult == "" ? "Successfully Transferred " + strFileName + " From " + (strCustomerpath) + " To " + strPath + strTodaysDate + "/" + " at " + DateTime.Now.ToString("HH:mm:ss") + " \n\r  \n\r" : "Failed " + strFileName + " - Due to {exception details}  \n\r  \n\r");
                    }
                    if (string.IsNullOrEmpty(this.LastStatus))
                        this.LastStatus = status;
                    else
                        this.LastStatus = string.Format("{0}<br /><br />{1}", this.LastStatus, status);
                    System.IO.StreamWriter file = new System.IO.StreamWriter(Server.MapPath("LogFilesForFileTransfer") + @"\FileTransferLog" + DateTime.Now.ToString("MM-dd-yyyy") + ".txt", true);
                    file.WriteLine(status1);
                    file.Close();


                    Thread.Sleep(1000);

                }
            }
        }

        if (strResult == "")
        {
            strfinalstatus = "Successfully Transferred All The Files";
        }
        else
        {
            strfinalstatus = strResult;
        }
        this.Processing = false;
    }   
   protected string RecursiveDownload(string strPath, string strFtpPath, string strFtpUser, string strFtpPwd, string strSubClientFTPPath, string strSubClientFTPUser, string strSubClientFTPPwd, string strFileName, string strConvFileName, string strType, string strFileSize)
    {
                string strResult = "";
        List<string> lstArray = new List<string>();

        if (strType != "" && strType != "&nbsp;")
        {
            strResult = TransferFile(strPath, strFtpPath, strFtpUser, strFtpPwd, strSubClientFTPPath, strSubClientFTPUser, strSubClientFTPPwd, strFileName, strConvFileName, strFileSize);
        }
        else
        {

            string strDirectoryInfo = fReturnDirectoryInfo1(strPath + strFileName, strFtpUser, strFtpPwd);
            string[] strSplit = strDirectoryInfo.Split('?');
            CreateFolder(strPath, strSubClientFTPPath, strSubClientFTPUser, strSubClientFTPPwd, strFileName);

            if (strDirectoryInfo != "")
            {
                for (int intLoop = 0; intLoop < strSplit.Length; intLoop++)
                {
                    strResult = RecursiveDownload(strPath + strFileName + "/", strFtpPath + strFileName + "/", strFtpUser, strFtpPwd, strSubClientFTPPath + strFileName + "/", strSubClientFTPUser, strSubClientFTPPwd, strSplit[intLoop].Split(':')[1],
                        strSplit[intLoop].Split(':')[1], strSplit[intLoop].Split(':')[0], strFileSize);
                }
            }
        }
        return strResult;
    }

   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
        {


            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);

                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                long cl = response.ContentLength;
                int bufferSize = 2048;
                int readCount;
                byte[] buffer = new byte[bufferSize];

                readCount = ftpStream.Read(buffer, 0, bufferSize);

                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;

        }
        return strSuccess;
  }

Я также пробовал различные настройки PASSIVE, SSL и других. но все же, я получаю это.

ПРИМЕЧАНИЕ: - FTP-клиент меняет свой ПОРТ после этого я получаю эту ошибку. так что это часть клиентской части или я должен изменить что-то в моем коде.

Надеюсь, вы понимаете мою проблему, если вы читаете мою проблему и не можете понять, пожалуйста, свяжитесь со мной, ответив на комментарий.

ЖУРНАЛ ВЫХОДА с использованием WEBREQUEST приведен ниже. это для 3 файлов, в которые переданы 1 и 2 файлы, но 3 файла дают ошибку.

[Subject]
  CN=*.h************d.net, OU=Domain Control Validated
  Simple Name: *.h************d.net
  DNS Name: h************d.net

[Issuer]
  CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O="GoDaddy.com, Inc.", L=Scottsdale, S=Arizona, C=US
  Simple Name: Go Daddy Secure Certificate Authority - G2
  DNS Name: Go Daddy Secure Certificate Authority - G2

[Serial Number]
  00***********CF

[Not Before]
  06/23/2019 11:20:31 PM

[Not After]
  06/23/2021 5:48:21 AM

[Thumbprint]
  043**************31991F8A

[Signature Algorithm]
  sha256RSA(1.2.840.113549.1.1.11)

[Public Key]
  Algorithm: RSA
  Length: 2048
  Key Blob: 30 82 01 0a 02 82 01 01 00 b3 08 29 d4 49 ab a0 ce 70 cd b2 72 1e 99 50 2f 63 9a 8c 95 8e c5 54 7b 66 bc 37 c3 81 b6 38 cb a8 aa f5 bc 95 99 94 2a de 11 73 5b b3 ed 00 ad dd 39 0b e1 52 b2 80 82 61 3c e5 37 15 92 f2 f8 6a fa ef 05 98 e2 f5 33 35 0d 09 0f 1d 14 1a a9 c8 e7 cd 04 87 a1 67 1....
System.Net Information: 0 : [12876] SecureChannel#29899600 - Remote certificate has errors:
System.Net Information: 0 : [12876] SecureChannel#29899600 -    Certificate name mismatch.
System.Net Information: 0 : [12876] SecureChannel#29899600 - Remote certificate was verified as valid by the user.
System.Net Information: 0 : [12876] ProcessAuthentication(Protocol=Tls, Cipher=Aes256 256 bit strength, Hash=Sha1 160 bit strength, Key Exchange=44550 256 bit strength).
System.Net Error: 0 : [12876] Decrypt failed with error 0X90317.
System.Net Information: 0 : [12876] FtpControlStream#35723434 - Received response [226 Successfully transferred "/RECORDS REVIEW/FROM TRANSCRIBER/2019/10 October 2019/10-09-19"]
System.Net Information: 0 : [12876] FtpWebRequest#29959295::(Releasing FTP connection#35723434.)
System.Net Information: 0 : [6012] ServicePoint#37369992 - Closed as idle.
System.Net Information: 0 : [1608] FtpWebRequest#9486968::.ctor(ftp://7*.***.***.***:11121/RECORDS REVIEW/FROM TRANSCRIBER/2019/10 October 2019/10-09-19/INVOICE %23 HP-ROR7506(********) ********, ******** 09-26-19 MED REC KIM ********.doc)
System.Net Information: 0 : [1608] FtpWebRequest#9486968::GetResponse(Method=RETR.)
System.Net Information: 0 : [1608] Associating FtpWebRequest#9486968 with FtpControlStream#34452536
System.Net Information: 0 : [1608] FtpControlStream#34452536 - Sending command [PASV]
System.Net Information: 0 : [1608] FtpControlStream#34452536 - Received response [227 Entering Passive Mode (7*,***,***,***,205,37)]
System.Net Information: 0 : [1608] FtpControlStream#34452536 - Sending command [RETR RECORDS REVIEW/FROM TRANSCRIBER/2019/10 October 2019/10-09-19/INVOICE # HP-ROR7506(********) ********, ******** 09-26-19 MED REC KIM ********.doc]
System.Net Information: 0 : [1608] FtpControlStream#34452536 - Received response [150 Opening data channel for file download from server of "/RECORDS REVIEW/FROM TRANSCRIBER/2019/10 October 2019/10-09-19/INVOICE # HP-ROR7506(********) ********, ******** 09-26-19 MED REC KIM ********.doc"]
System.Net Information: 0 : [1608] TlsStream#38212950::.ctor(host=7*.***.***.***, #certs=0, checkCertificateRevocationList=False, sslProtocols=Default)
System.Net Information: 0 : [1608] SecureChannel#52936877::.ctor(hostname=7*.***.***.***, #clientCertificates=0, encryptionPolicy=RequireEncryption)
System.Net Information: 0 : [1608] SecureChannel#52936877 - Left with 0 client certificates to choose from.
System.Net Information: 0 : [1608] Using the cached credential handle.
System.Net Information: 0 : [1608] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = (null), targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1608] InitializeSecurityContext(In-Buffer length=0, Out-Buffer length=135, returned code=ContinueNeeded).
System.Net Information: 0 : [1608] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 81e3228:b56e008, targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1608] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=ContinueNeeded).
System.Net Information: 0 : [1608] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 81e3228:b56e008, targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1608] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=ContinueNeeded).
System.Net Information: 0 : [1608] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 81e3228:b56e008, targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1608] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=ContinueNeeded).
System.Net Information: 0 : [1608] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 81e3228:b56e008, targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1608] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=134, returned code=ContinueNeeded).
System.Net Information: 0 : [1608] FtpWebRequest#9486968::(Releasing FTP connection#34452536.)
System.Net Error: 0 : [1608] Exception in FtpWebRequest#9486968::GetResponse - The remote server returned an error: 150 Opening data channel for file download from server of "/RECORDS REVIEW/FROM TRANSCRIBER/2019/10 October 2019/10-09-19/INVOICE # HP-ROR7506(********) ********, ******** 09-26-19 MED REC KIM ********.doc"
..
   at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
   at System.Net.FtpWebRequest.RequestCallback(Object obj)
   at System.Net.CommandStream.Dispose(Boolean disposing)
   at System.IO.Stream.Close()
   at System.IO.Stream.Dispose()
   at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
   at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
   at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
   at System.Net.FtpWebRequest.GetResponse()
System.Net Information: 0 : [1608] FtpWebRequest#55445276::.ctor(ftp://7*.***.***.***:11121/RECORDS REVIEW/FROM TRANSCRIBER/2019/10 October 2019/10-09-19/INVOICE %23 HP-ROR7507(********) ********.doc)
System.Net Information: 0 : [1608] FtpWebRequest#55445276::GetResponse(Method=RETR.)
System.Net Information: 0 : [1608] Associating FtpWebRequest#55445276 with FtpControlStream#35723434
System.Net Information: 0 : [1608] FtpControlStream#35723434 - Sending command [CWD /]
System.Net Information: 0 : [1988] FtpWebRequest#23551555::.ctor(ftp://7*.***.***.***:11121/RECORDS REVIEW/FROM TRANSCRIBER/2019/10 October 2019/10-09-19/)
System.Net Information: 0 : [1988] FtpWebRequest#23551555::GetResponse(Method=LIST.)
System.Net Information: 0 : [1608] FtpControlStream#35723434 - Received response [250 CWD successful. "/" is current directory.]
System.Net Information: 0 : [1608] FtpControlStream#35723434 - Sending command [PASV]
System.Net Information: 0 : [1988] FtpControlStream#15713638 - Created connection from 10.200.10.35:56838 to 7*.***.***.***:11121.
System.Net Information: 0 : [1988] Associating FtpWebRequest#23551555 with FtpControlStream#15713638
System.Net Information: 0 : [1608] FtpControlStream#35723434 - Received response [227 Entering Passive Mode (7*,***,***,***,205,62)]
System.Net Information: 0 : [1988] FtpControlStream#15713638 - Received response [220-FileZilla Server 0.9.60 beta
220-written by Tim Kosse (Tim.Kosse@gmx.de)
220 Please visit https://filezilla-project.org/]
System.Net Information: 0 : [1988] FtpControlStream#15713638 - Sending command [AUTH TLS]
System.Net Information: 0 : [1608] FtpControlStream#35723434 - Sending command [RETR RECORDS REVIEW/FROM TRANSCRIBER/2019/10 October 2019/10-09-19/INVOICE # HP-ROR7507(********) ********.doc]
System.Net Information: 0 : [1988] FtpControlStream#15713638 - Received response [234 Using authentication type TLS]
System.Net Information: 0 : [1988] TlsStream#56336575::.ctor(host=7*.***.***.***, #certs=0, checkCertificateRevocationList=False, sslProtocols=Default)
System.Net Information: 0 : [1988] FtpControlStream#15713638 - Sending command [USER ********]
System.Net Information: 0 : [1988] SecureChannel#47899302::.ctor(hostname=7*.***.***.***, #clientCertificates=0, encryptionPolicy=RequireEncryption)
System.Net Information: 0 : [1988] SecureChannel#47899302 - Left with 0 client certificates to choose from.
System.Net Information: 0 : [1988] Using the cached credential handle.
System.Net Information: 0 : [1988] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = (null), targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1988] InitializeSecurityContext(In-Buffer length=0, Out-Buffer length=103, returned code=ContinueNeeded).
System.Net Information: 0 : [1988] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 81e3228:b4d7158, targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1988] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=ContinueNeeded).
System.Net Information: 0 : [1988] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 81e3228:b4d7158, targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1988] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=ContinueNeeded).
System.Net Information: 0 : [1988] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 81e3228:b4d7158, targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1988] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=ContinueNeeded).
System.Net Information: 0 : [1988] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 81e3228:b4d7158, targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1988] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=134, returned code=ContinueNeeded).
System.Net Information: 0 : [1608] FtpControlStream#35723434 - Received response [150 Opening data channel for file download from server of "/RECORDS REVIEW/FROM TRANSCRIBER/2019/10 October 2019/10-09-19/INVOICE # HP-ROR7507(********) ********.doc"]
System.Net Information: 0 : [1608] TlsStream#50391717::.ctor(host=7*.***.***.***, #certs=0, checkCertificateRevocationList=False, sslProtocols=Default)
System.Net Information: 0 : [1608] SecureChannel#56638896::.ctor(hostname=7*.***.***.***, #clientCertificates=0, encryptionPolicy=RequireEncryption)
System.Net Information: 0 : [1608] SecureChannel#56638896 - Left with 0 client certificates to choose from.
System.Net Information: 0 : [1608] Using the cached credential handle.
System.Net Information: 0 : [1608] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = (null), targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1608] InitializeSecurityContext(In-Buffer length=0, Out-Buffer length=103, returned code=ContinueNeeded).
System.Net Information: 0 : [1988] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 81e3228:b4d7158, targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1988] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=ContinueNeeded).
System.Net Information: 0 : [1988] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 81e3228:b4d7158, targetName = 7*.***.***.***, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [1988] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=OK).
System.Net Information: 0 : [1988] Remote certificate: [Version]
  V3

1 Ответ

3 голосов
/ 11 октября 2019

Я не уверен на 100%, если это связано, но ...

У нас точно такая же проблема, и она началась вчера, после нескольких лет нормальной работы, на стороне клиента мы получаем тот же FTP '150 'ответа от сервера, но если мы проверим журналы сервера, происходит что-то более серьезное, мы получим:

"450 TLS-сеанс подключения для передачи данных не возобновлен или сеанс не соответствует элементу управленияconnection "

Поскольку это очень недавняя проблема, и она изолирована лишь от нескольких наших клиентов, нам удалось сузить потенциальную проблему до 3 обновлений Windows, но я не уверен, что они изменились:

  • 2019-10 Накопительное обновление для системы безопасности браузера Internet Explorer 11 (KB4519974)
  • 2019-10- Ежемесячный сводный анализ безопасности (KB4520005)
  • 2019-1-Обновление только для безопасности (KB4519990)

Один из наших клиентов откатил эти обновления, и наше программное обеспечение снова заработало для них.

Поскольку мы не можем ожидать, что выЧтобы пользователи могли откатывать обновления безопасности, текущий обходной путь, который мы используем для этого, состоит в том, чтобы отключить параметр «Требовать возобновления сеанса TLS при подключении к данным при использовании PROT P» на сервере, но это имеет связанные с безопасностью последствия, поэтомутвердое решение в будущем.

Я лично подозреваю, что одно из обновлений испортило работу класса FtpWebRequest и, возможно, оно больше не обрабатывает само возобновление сеанса TLS.

из того, что я прочиталИнтернет, отчаянно ищущий что-то связанное с этими наиболее коммерческими FTP-клиентами, основывается на классе FtpWebRequest и самостоятельно обрабатывает возобновление сеанса TLS.

...