2011-01-17 21 views
18

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.

+0

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

Respuesta

6

FtpStatusCode.ConnectionClosed es 426 que es Connection closed; transfer aborted así que creo que sería un fracaso en realidad. Cualquier cosa en el rango 2XX generalmente debería ser un éxito. Para los clientes FTP que he creado, el que recuerdo haber recibido solo para una carga exitosa es 226 - FtpStatusCode.ClosingData

+0

Gracias, Chris. Pero como he indicado anteriormente, también he verificado el valor de ClosingData. La mayoría de las veces o casi siempre en mi entorno de desarrollo obtengo este estado. Pero de alguna manera en el entorno de producción, estoy recibiendo un problema. (Estoy cargando el archivo nuevamente si los códigos de estado no coinciden con ninguno de ellos como se menciona en mi publicación anterior. El archivo en realidad se está cargando dos veces). Hay otro código de estado recuperado que no es uno entre los que mencioné anteriormente , pero aún es un caso de éxito. Alguna idea sobre esto? – Nishant

+1

Recomiendo activar el seguimiento de System.Net y ver si puede obtener más información sobre por qué la carga está fallando. http://blogs.msdn.com/b/dgorti/archive/2005/09/18/471003.aspx –

+0

@Nishant Existen muchos códigos de estado diferentes debido a la versión diferente de FTP RFC, pero debe estar seguro de qué versión de El FTP que está utilizando y luego debería usar códigos FTP inequívocos, mejor usar SFTP o FTPS. –

Cuestiones relacionadas