Jump to content

Windows Server 2019 - C# - FtpWebRequest dont work


Direkt zur Lösung Gelöst von mwiederkehr,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hey i have bought a Windows Server 2019 on Strato.

 

Now i want to download fiels from an ftp to this server via. my Application.

The Application works fine on my local PC. It connects to the ftp and download all files.

But on the Windows Server i alltimes get a timerout error at response = reqFTP.GetResponse();

 

If i use filezilla on the Windows Server it works. I can manually download the files.

 

I think its something with the server because the code is working local but here is my code:

 

 

public void GetFileListAndContinue(string RemoteDirectory, string sLocalDirectory)
        {
            string sActualRemoteDirectory = RemoteDirectory;
            string sActualDirectory = sLocalDirectory;

            string[] downloadFiles;
            StringBuilder result = new StringBuilder();
            WebResponse response = null;
            StreamReader reader = null;
            try
            {
                FtpWebRequest reqFTP;
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(RemoteDirectory));
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(sFtpUserID, sFtpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
                reqFTP.Proxy = null;
                reqFTP.KeepAlive = false;
                reqFTP.UsePassive = false;
                response = reqFTP.GetResponse();
                reader = new StreamReader(response.GetResponseStream());
                string line = reader.ReadLine();
                while (line != null)
                {
                    result.Append(line);
                    result.Append("\n");
                    line = reader.ReadLine();
                }
                // to remove the trailing '\n'
                result.Remove(result.ToString().LastIndexOf('\n'), 1);

                string[] files = result.ToString().Split('\n');

                string item = ".";

                files = files.Where(e => e != item).ToArray();
                Console.WriteLine(String.Join(",", files));

                item = "..";

                files = files.Where(e => e != item).ToArray();
                Console.WriteLine(String.Join(",", files));

                foreach (string file in files)
                {
                    if (file.Contains("."))
                    {
                        Download(file, RemoteDirectory, sLocalDirectory);
                    }
                    else
                    {
                        sActualDirectory = sLocalDirectory;
                        sActualRemoteDirectory = RemoteDirectory;
                        sActualDirectory = sActualDirectory + file + "/";
                        sActualRemoteDirectory = sActualRemoteDirectory + file + "/";
                        createdir(sActualDirectory);

                        GetFileListAndContinue(sActualRemoteDirectory, sActualDirectory);
                    }
                }
            }
            catch (Exception ex)
            {
                if (reader != null)
                {
                    reader.Close();
                }
                if (response != null)
                {
                    response.Close();
                }
            }
        }
bearbeitet von ChristianErdtmann
Link zu diesem Kommentar

@mwiederkehr Do you have an idea why my programm got now again timeout. I used how you said the reqFTP.UsePassive = true and it connect and load my first folder. But after that it timeout again at the same line. Local with active mode it works an load all folders and files.

vor 27 Minuten schrieb NilsK:

Moin,

 

Und warum verhandelt ihr das nicht auf Deutsch?

 

Gruß, Nils

 

Ach ist das hier ein Deutsches Forum :D Das wusste ich nicht. Dachte auf englisch erreich ich schneller wen.

@mwiederkehr gerne auch hier antworten habe dazu noch mal ein neues Thema geöffnet 

 

Additional Info: I tested it now local with passive mode and that works too dont know why it dont works on the server

Link zu diesem Kommentar

Ich kenne die Ursache für den Fehler leider nicht. Hilft es, wenn Du in der Firewall für Deine Anwendung alles öffnest?

 

Du verwendest den FtpWebRequest. Diesen gibt es ab .Net 6 nicht mehr. (Die WebRequest-"Familie" fällt raus, für HTTP gibt es den HttpClient, für FTP gibt es keine eingebauten Klassen mehr.) Mit Google finde ich viele Leute, die das gleiche Problem haben wie Du.

 

Du könntest deshalb prüfen, ob es mit einem anderen Client geht. Ich verwende FluentFTP. Dieser ist weniger sperrig anzusteuern und kann etwa rekursive Downloads von Haus aus.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...