ranio Ответов: 1

Как удалить списка время ожидания при выборке большого объема данных через SFTP в C#?


Я получаю проблему тайм-аута списка при извлечении большого объема файлов с помощью sftp в c#. Я могу извлекать и скачивать файлы размером до 50 тысяч. Но если в диапазоне выше 70к или около того попадаешь ниже исключения:
ListTimeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.


Дал команду тайм-аут в области вызова базы данных через сервер Sql DB. Но проблема все равно остается.

Что я уже пробовал:

_listSftp.ListItemReceived += (s, e) =>
                    {
                        SftpItem item = e.Item;
                        objSFTPFile = new SFTPFile();
                        objSFTPFile.FileType = "DDS300";
                        objSFTPFile.Extension = "DDR";
                        objSFTPFile.Status = SFTPStatus.L.ToString();
                        objSFTPFile.FileName = item.Name.Trim();
                        objSFTPFile.FileSize = item.Size;
                        objSFTPFile.Mode = SFTPMode.D.ToString();
                        objSFTPFile.BankCode = Common.BANKCODE;
                        ListSFTPFile.Add(objSFTPFile);
                        Common.WriteLog(MethodInfo.GetCurrentMethod().Name + " FileType: " + objSFTPFile.FileType + " FileName: " + objSFTPFile.FileName, ServiceThread.Listing.ToString());
                        // skip adding item to resulting collection
                        e.Ignore();
                    };

                    // clear resulting collection first
                    ListSFTPFile.Clear();

                    // issue directory listing
                    SftpItemCollection List = _listSftp.GetList(GetSFTPServerPath("Files"));

и экономия

string strxml = DAL_Common.getXMLFromList(listInwardFile);
               DataSet dsDetails = new DataSet();
               DbCommand DbCmd = DataAccessBase.Database.GetStoredProcCommand("DDS_SAVE_SFTP_DOWNLOAD_LIST");
               DbCmd.CommandTimeout = 600;

               DataAccessBase.Database.AddInParameter(DbCmd, "@p_BankCode", DbType.String, strBankCode);
               DataAccessBase.Database.AddInParameter(DbCmd, "@p_xml", DbType.Xml, strxml);
               DataAccessBase.Database.AddOutParameter(DbCmd, "@p_error_code", DbType.String, 40);
               DataAccessBase.Database.AddOutParameter(DbCmd, "@p_error_msg", DbType.String, 1000);

               int i = DataAccessBase.Database.ExecuteNonQuery(DbCmd);
               int ErrorCode = Convert.ToInt32(DataAccessBase.Database.GetParameterValue(DbCmd, "@p_error_code").ToString());
               Errormsg = DataAccessBase.Database.GetParameterValue(DbCmd, "@p_error_msg").ToString();

1 Ответов

Рейтинг:
2

#realJSOP

Вы пробовали увеличить свойство Timeout объекта ftpwebrequest? Это значение представляет собой миллисекунды.

FileZilla (популярный FTP-клиент) использует значение по умолчанию 20 секунд, что недостаточно долго для получения/размещения любого значительного количества файлов, поэтому мне пришлось увеличить тайм-аут соединения до 30 минут.