viewcomponent tag net mvc asp asp.net ftp ftpwebrequest network-connection

asp.net - mvc - tag helpers asp net core



Errores durante la carga de imágenes a FTP (1)

Estoy recibiendo muchos problemas diferentes en esta función:

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

Esto está cargando 1000s de imágenes a FTP, y este methos se llama en forma de múltiples hilos.

Diferentes errores son:

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

Mensaje: la operación ha expirado

Rastreo de error: en System.Net.FtpWebRequest.CheckError () en System.Net.FtpWebRequest.GetRequestStream ()

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

Mensaje de error: no se puede conectar al servidor remoto

Rastreo de error: en System.Net.FtpWebRequest.CheckError () en System.Net.FtpWebRequest.GetRequestStream ()

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

Mensaje de error: se cerró la conexión subyacente: se produjo un error inesperado en una recepción.

Trace de error: en System.Net.FtpWebRequest.CheckError () en System.Net.FtpWebRequest.SyncRequestCallback (Object obj) en System.Net.CommandStream.Abort (Exception e) en System.Net.FtpWebRequest.FinishRequestStage (fase RequestStage) en System.Net.FtpWebRequest.GetRequestStream ()

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

Mensaje de error: no se pueden escribir datos en la conexión de transporte: falló un intento de conexión porque la parte conectada no respondió correctamente después de un período de tiempo, o la conexión establecida falló porque el host conectado no ha respondido.

Rastreo de error: en System.Net.Sockets.NetworkStream.Write (Byte [] buffer, desplazamiento Int32, tamaño Int32) en System.Net.FtpDataStream.Write (Byte [] buffer, desplazamiento Int32, tamaño Int32) ===== ===============================================

Estos son algunos errores que provienen del mismo método que recuperé del archivo LOG.

¿Alguna idea de lo que podría estar causando esto? O necesito dar más detalles?


La siguiente excepción se encuentra cuando se alcanza un tiempo de espera:

Mensaje de error: se cerró la conexión subyacente: se produjo un error inesperado en una recepción.

Como se explica en la documentación de msdn, el valor predeterminado del tiempo de espera es infinito, pero la documentación de msdn contiene un error: http://msdn.microsoft.com/fr-fr/library/vstudio/system.net.ftpwebrequest.timeout(v= vs.80) .aspx

De hecho, el valor predeterminado es 100000 ms (1 min y 40 seg) para que pueda declarar el valor Timeout en infinito con: oFtpWebRequest.Timeout = -1;

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