asp.net - тип - как настроить автоматическую подстановку текущей даты в поле "начало активности" элемента инфоблока?



Ошибки при загрузке изображений на FTP (1)

Я получаю много разных проблем в этой функции:

public static bool UploadToFTP(string strFileName, string strFolderName)
        {
            bool isUploaded = false;
            string strFilename = string.Empty;
            string strFtpURI = string.Empty;
            string strFtpUserId = string.Empty;
            string strFtpPassword = string.Empty;
            byte[] buffer = null;
            FileInfo oFileInfo = null;
            FileStream oFileStream = null;
            FtpWebRequest oFtpWebRequest = null;

            try
            {
                strFilename = strFileName;
                oFileInfo = new FileInfo(strFilename);
                strFtpURI = Constants.FtpUri;
                strFtpUserId = Constants.FtpUserID;
                strFtpPassword = Constants.FtpPassword;

                oFtpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFtpURI + "/" + strFolderName + "/" + oFileInfo.Name));

                oFtpWebRequest.Credentials = new NetworkCredential(strFtpUserId, strFtpPassword);
                oFtpWebRequest.Proxy = null;
                oFtpWebRequest.KeepAlive = false;
                oFtpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
                oFtpWebRequest.UseBinary = true;
                oFtpWebRequest.ContentLength = oFileInfo.Length;

                int iBufferLength = 2084;

                buffer = new byte[iBufferLength];

                int iContentLength = 0;

                oFileStream = oFileInfo.OpenRead();

                try
                {
                    iContentLength = oFileStream.Read(buffer, 0, iBufferLength);

                    using (Stream oStream = oFtpWebRequest.GetRequestStream())
                    {
                        while (iContentLength != 0)
                        {
                            oStream.Write(buffer, 0, iContentLength);

                            iContentLength = oFileStream.Read(buffer, 0, iBufferLength);
                        }
                        isUploaded = true;
                        FtpUpload.TotalKBFilesUploaded =  FtpUpload.TotalKBFilesUploaded + (int)(oFileInfo.Length / 1000);
                    }
                }
                catch (Exception ex)
                {

                }
                finally
                {
                    if (oFtpWebRequest != null)
                    {
                        oFtpWebRequest.Abort();
                        oFtpWebRequest = null;
                    }

                    if (buffer != null)
                    {
                        buffer = null;
                    }

                    if (oFileStream != null)
                    {
                        oFileStream.Close();
                        oFileStream.Dispose();
                    }
                }
            }
            catch (Exception ex)
            {
            }
            finally
            {
                oFileInfo = null;
            }

            return isUploaded;
        }

Это загрузка 1000 изображений на FTP, и этот метод называется многопоточным способом.

Существуют различные ошибки:

================================================== =====

Сообщение: время работы

Трассировка ошибок: в System.Net.FtpWebRequest.CheckError () в System.Net.FtpWebRequest.GetRequestStream ()

================================================== =====

Сообщение об ошибке: невозможно подключиться к удаленному серверу

Трассировка ошибок: в System.Net.FtpWebRequest.CheckError () в System.Net.FtpWebRequest.GetRequestStream ()

================================================== =====

Сообщение об ошибке: базовое соединение было закрыто: произошла непредвиденная ошибка при приеме.

Трассировка ошибок: в System.Net.FtpWebRequest.CheckError () в System.Net.FtpWebRequest.SyncRequestCallback (Object obj) в System.Net.CommandStream.Abort (исключение e) на System.Net.FtpWebRequest.FinishRequestStage (этап RequestStage) в System.Net.FtpWebRequest.GetRequestStream ()

================================================== =====

Сообщение об ошибке: невозможно записать данные в транспортное соединение: попытка подключения завершилась неудачно, потому что связанная сторона не ответила должным образом через некоторое время или установив соединение не удалось, поскольку подключенный хост не смог ответить.

Трассировка ошибок: в System.Net.Sockets.NetworkStream.Write (буфер Byte [], смещение Int32, размер Int32) в System.Net.FtpDataStream.Write (буфер Byte [], смещение Int32, размер Int32) ===== ==================================================

Это несколько ошибок, исходящих из того же метода, который я получил из файла LOG.

Любая идея, что может быть причиной этого? Или мне нужно дать более подробную информацию?

https://src-bin.com


Answer #1

При достижении тайм-аута возникает следующее исключение:

Сообщение об ошибке: базовое соединение было закрыто: произошла непредвиденная ошибка при приеме.

Как объясняется в документации msdn, значение по умолчанию таймаута бесконечно, но в документации msdn содержится ошибка: http://msdn.microsoft.com/fr-fr/library/vstudio/system.net.ftpwebrequest.timeout(v= vs.80) .aspx

Фактически, значение по умолчанию составляет 100000 мс (1 мин и 40 секунд), поэтому вы можете объявить значение Timeout бесконечным с помощью: oFtpWebRequest.Timeout = -1;

http://www.sidesofmarch.com/index.php/archive/2012/04/06/damn-the-documentation-ftpwebrequest-timeout-default-value-is-not-infinite/