2013-10-08 5 views
8

Я получаю много различных вопросов в этой функции:Ошибки, приезжающие во время загрузки изображений на FTP

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

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

Различные ошибки:

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

Сообщение: операция истекло

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

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

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

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

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

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

трассировки Ошибка: в System.Net.FtpWebRequest.CheckError() в System.Net.FtpWebRequest.SyncRequestCallback (OBJ объекта) при System.Net.CommandStream.Abort (Исключение е) при System.Net.FtpWebRequest.FinishRequestStage (Шаг запроса) в System.Net.FtpWebRequest.GetRequestStream()

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

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

трассировка Ошибки: в System.Net.Sockets.NetworkStream.Write (байты [] буфер, Int32 смещения, размер Int32) при System.Net.FtpDataStream.Write (байты [] буфер, Int32 смещения, Int32 размера) =============================================================================================================== ======

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

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

+0

Похоже, что вам нужно ** поговорить с вашим п/ж, ребята в вашей Org **. Я вижу, что все ошибки либо «проблемы с подключением n/w», либо «сервер не отвечает» правильно! – SridharVenkat

ответ

7

следующее исключение встречается, когда тайм-аут достигается:

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

Как объяснено в документации 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/