Esto es un poco complicado.Código de estado del método FTPWebRequest.GetResponse()
Estoy cargando archivos a FTP de forma asincrónica. Después de cargar cada archivo, estoy verificando el estado de la operación de carga para ese archivo. Esto se puede hacer con la propiedad StatusCode del objeto FtpWebResponse para esa solicitud. El fragmento de código es el siguiente.
FileStream fs = File.Open(fileName, FileMode.Open);
while ((iWork = fs.Read(buf, 0, buf.Length)) > 0)
requestStream.Write(buf, 0, iWork);
requestStream.Close();
FtpWebResponse wrRet = ((FtpWebResponse)state.Request.GetResponse());
Hay cerca de 37 los valores de StatusCode según msdn. No estoy al tanto de cuáles de estos valores de código de estado garantizarán que el archivo se cargue correctamente. Algunos de ellos que utilicé en mi código para verificar el éxito son:
wrRet.StatusCode == FtpStatusCode.CommandOK
wrRet.StatusCode == FtpStatusCode.ClosingData
wrRet.StatusCode == FtpStatusCode.ClosingControl
wrRet.StatusCode == FtpStatusCode.ConnectionClosed
wrRet.StatusCode == FtpStatusCode.FileActionOK
wrRet.StatusCode == FtpStatusCode.FileStatus
Pero no tengo conocimiento del resto. Necesito estar seguro acerca de estos códigos porque basado en el fracaso o éxito de la operación de carga, tengo que realizar otras operaciones dependientes. Una condición incorrecta puede afectar el código restante. Otro pensamiento que cruzó mi mente fue simplemente poner el código anterior en una captura de prueba y no depender de estos códigos de estado. Con esto no estaría dependiendo de los códigos de estado y suponiendo que cualquier falla siempre se dirigirá al bloque catch. Amablemente avíseme si esta es la manera correcta.
Tuve mis problemas con los servidores FTP. Me gustaría ir con una solución pragmática y simplemente verificar si el archivo que acaba de subir al servidor se puede encontrar de nuevo después de la carga. Sé que no responde la pregunta, pero llegué a la conclusión de que no podía confiar en la respuesta de los servidores FTP. – MacGyver