Sto lavorando su client FTP per uso interno per le distribuzioni. Ho iniziato con gli script WinSCP, tutto sembra funzionare bene, tranne una operazione (eliminazione di directory di grandi dimensioni (molti file) contenenti file e sottodirectory). So che il mio server FTP di destinazione non supporta la 'rimozione della directory ricorsiva', tuttavia è possibile ottenere l'operazione desiderata eseguendo la ricorsione sul lato client (elenca tutti i file / dir ed elimina tutto uno per uno).
Riga di script WinSCP che fallisce:
rmdir /path/to/large_directory
Errore:
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.
Dopo aver non trovato la soluzione sullo script WinSCP, ho deciso di scrivere sulla mia applicazione di distribuzione utilizzando C # e la libreria open source 'System.Net.FtpClient'. Tuttavia, ben presto affrontato lo stesso problema 'ricorsiva rimozione di directory di grandi dimensioni' non riesce. Tranne questa volta ha avuto più informazioni sull'errore:
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 ---
Sfida: il verificarsi di un errore è imprevedibile, nel senso che la directory specificata che contiene solo poche directory o file interni può avere esito positivo o negativo, ma in un caso più ampio è quasi garantito il fallimento. Questo vale per l'applicazione WinSCP e C #. Quindi, in teoria, questa è la soluzione possibile - continua a ripetere lo script fino a quando la directory non viene completamente rimossa, ma farlo comporta un altro problema (la riconnessione manuale è una di queste).
Pur provando molte cose diverse, ho scoperto che disabilitare completamente il firewall di Windows 10 ha funzionato. Pertanto, l'app C # e lo script WinSCP sono stati eseguiti in modo impeccabile.
Ho bisogno di aiuto con l'impostazione corretta del firewall , ma non importa cosa faccia il problema persiste, tranne se il firewall è completamente disabilitato. Ho persino creato regole in entrata / uscita, che dovrebbero applicarsi a tutti i profili, tutti gli indirizzi IP / porte locali / remoti, le applicazioni / i servizi ... ancora senza risultati desiderati.
Regolainuscita: