Estoy trabajando en un cliente FTP para uso interno para implementaciones. Comencé con los scripts de WinSCP, todo parece funcionar bien, excepto una operación (eliminar un directorio grande (muchos archivos) que contiene archivos y subdirectorios). Sé que mi servidor FTP específico no admite la "eliminación recursiva de directorios", sin embargo, es posible lograr la operación deseada haciendo la recursión en el lado del cliente (enumerar todos los archivos / archivos y eliminar todo uno por uno).
Línea de script WinSCP que falla:
rmdir /path/to/large_directory
error:
Lost connection.
Disconnected from server
Error deleting file '/path/to/large_directory/InnerDir/InnerDir2/dir'.
Error deleting file '/path/to/large_directory/InnerDir/InnerDir2'.
Error deleting file '/path/to/large_directory/InnerDir'.
Error deleting file '/path/to/large_directory'.
Session '[email protected]' closed.
No session.
Después de no poder encontrar una solución en el script WinSCP, decidí escribir en mi propia aplicación de implementación utilizando C # y la biblioteca de código abierto 'System.Net.FtpClient'. Sin embargo, muy pronto se enfrentó con el mismo problema: "la eliminación del directorio grande recursiva" falla. Excepto que esta vez tenía más información sobre el error:
Disposing FtpClient object...
Disposing FtpSocketStream...
System.IO.IOException:
Unable to read data from the transport connection:
An attempt was made to access a socket in a way forbidden by its access permissions.
---> System.Net.Sockets.SocketException:
An attempt was made to access a socket in a way forbidden by its access permissions
at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
--- End of inner exception stack trace ---
Desafío: la ocurrencia de un error es impredecible, en el sentido de que un directorio dado que contiene solo algunos directorios o archivos internos puede tener éxito o fallar, pero en un caso más grande es casi seguro que falle. Esto se aplica a la aplicación WinSCP y C #. Entonces, en teoría, esta es una posible solución: repita la secuencia de comandos hasta que el directorio se elimine por completo, pero al hacerlo se presentan otros desafíos (la reconexión manual es uno de ellos).
Mientras intentaba muchas cosas diferentes, descubrí que deshabilitar completamente el firewall de Windows 10 funcionó. Por lo tanto, la aplicación C # permitida y el script WinSCP se ejecutan sin problemas.
Necesito ayuda para configurar el firewall correctamente , pero no importa lo que haga, el problema aún persiste, excepto si el firewall está completamente desactivado. Incluso he creado reglas de entrada / salida, que deberían aplicarse a todos los perfiles, a todas las direcciones IP locales / remotas, a los puertos, a las aplicaciones / a los servicios ... aún sin resultados deseados.
Regladesalida: