Jump to content

ChristianErdtmann

Members
  • Gesamte Inhalte

    6
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von ChristianErdtmann

  1.  

    Hey, ich habe einen Windows Server 2019 gekauft und versuche, das folgende C#-Programm auszuführen.

    Auf meinem lokalen PC funktioniert alles einwandfrei, es verbindet sich und lädt alle Daten von meinem FTP.
    Aber auf meinem lokalen PC verwende ich reqFTP.UsePassive = false;


    Auf dem Windows - Server ist die Anfrage immer abgelaufen, wenn ich versuche, reqFTP.UsePassive = false zu verwenden; also habe ich reqFTP.UsePassive = true verwendet;

     

    Dies war der erste Schritt.Das Programm startet nun connect und kopiert den ersten Ordner meiner Verzeichnisse.
    Aber das ist alles. Es las alle Ordner und las den Inhalt des ersten Ordners.Aber wenn es versucht, die erste Datei aus dem ersten Verzeichnis herunterzuladen, bekomme ich wieder ein Timeout bei FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

     

    Zusätzliche Info: Wenn ich meine Firewall abschalte, dann funktioniert alles und die Dateien werden geladen:

     

    Code unten:

     

     

    1. using System;
    2. using System.Collections.Generic;
    3. using System.IO;
    4. using System.Linq;
    5. using System.Net;
    6. using System.Text;
    7. using System.Threading.Tasks;
    8.  
    9. namespace GetBotfilesFromFTP
    10. {
    11. class Program
    12. {
    13. string sFtpServerIP = "SERVERIP";
    14. string sFtpUserID = "USERID";
    15. string sFtpPassword = "USERPASSWORT";
    16. string sRemoteDir = "ftp://w01a18b1.kasserver.com/";
    17.  
    18.  
    19. static void Main(string[] args)
    20. {
    21. Program self = new Program();
    22.  
    23. string url = "ftp://" + self.sFtpServerIP + "/";
    24. NetworkCredential credentials = new NetworkCredential();
    25. credentials.Password = self.sFtpPassword;
    26. credentials.UserName = self.sFtpUserID;
    27.  
    28.  
    29. self.GetFileListAndContinue(self.sRemoteDir, "C:/");
    30. }
    31.  
    32. public void GetFileListAndContinue(string RemoteDirectory, string sLocalDirectory)
    33. {
    34. string sActualRemoteDirectory = RemoteDirectory;
    35. string sActualDirectory = sLocalDirectory;
    36.  
    37. string[] downloadFiles;
    38. StringBuilder result = new StringBuilder();
    39. WebResponse response = null;
    40. StreamReader reader = null;
    41. try
    42. {
    43. FtpWebRequest reqFTP;
    44. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(RemoteDirectory));
    45. reqFTP.UseBinary = true;
    46. reqFTP.Credentials = new NetworkCredential(sFtpUserID, sFtpPassword);
    47. reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
    48. reqFTP.Proxy = null;
    49. reqFTP.KeepAlive = false;
    50. reqFTP.UsePassive = true;
    51. response = reqFTP.GetResponse();
    52. reader = new StreamReader(response.GetResponseStream());
    53. string line = reader.ReadLine();
    54. while (line != null)
    55. {
    56. result.Append(line);
    57. result.Append("\n");
    58. line = reader.ReadLine();
    59. }
    60. // to remove the trailing '\n'
    61. result.Remove(result.ToString().LastIndexOf('\n'), 1);
    62.  
    63. string[] files = result.ToString().Split('\n');
    64.  
    65. string item = ".";
    66.  
    67. files = files.Where(e => e != item).ToArray();
    68. Console.WriteLine(String.Join(",", files));
    69.  
    70. item = "..";
    71.  
    72. files = files.Where(e => e != item).ToArray();
    73. Console.WriteLine(String.Join(",", files));
    74.  
    75. foreach (string file in files)
    76. {
    77. if (file.Contains("."))
    78. {
    79. Download(file, RemoteDirectory, sLocalDirectory);
    80. }
    81. else
    82. {
    83. sActualDirectory = sLocalDirectory;
    84. sActualRemoteDirectory = RemoteDirectory;
    85. sActualDirectory = sActualDirectory + file + "/";
    86. sActualRemoteDirectory = sActualRemoteDirectory + file + "/";
    87. createdir(sActualDirectory);
    88.  
    89. GetFileListAndContinue(sActualRemoteDirectory, sActualDirectory);
    90. }
    91. }
    92. }
    93. catch (Exception ex)
    94. {
    95. if (reader != null)
    96. {
    97. reader.Close();
    98. }
    99. if (response != null)
    100. {
    101. response.Close();
    102. }
    103. }
    104. }
    105.  
    106. private void Download(string file, string RemoteDirectory, string sLocalPath)
    107. {
    108. try
    109. {
    110. string uri = RemoteDirectory + file;
    111. Uri serverUri = new Uri(uri);
    112. if (serverUri.Scheme != Uri.UriSchemeFtp)
    113. {
    114. return;
    115. }
    116. FtpWebRequest reqFTP;
    117. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    118. reqFTP.Credentials = new NetworkCredential(sFtpUserID, sFtpPassword);
    119. reqFTP.KeepAlive = false;
    120. reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
    121. reqFTP.UseBinary = true;
    122. reqFTP.Proxy = null;
    123. reqFTP.UsePassive = false;
    124. FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    125. Stream responseStream = response.GetResponseStream();
    126. FileStream writeStream = new FileStream(sLocalPath + file, FileMode.Create);
    127.  
    128. int Length = 2048;
    129. Byte[] buffer = new Byte[Length];
    130. int bytesRead = responseStream.Read(buffer, 0, Length);
    131. while (bytesRead > 0)
    132. {
    133. writeStream.Write(buffer, 0, bytesRead);
    134. bytesRead = responseStream.Read(buffer, 0, Length);
    135. }
    136. writeStream.Close();
    137. response.Close();
    138. }
    139. catch (WebException wEx)
    140. {
    141. }
    142. catch (Exception ex)
    143. {
    144. }
    145. }
    146.  
    147. //// In this part i create the sub-directories.
    148. ///
    149. public void createdir(string path)
    150. {
    151. if (!Directory.Exists(path))
    152. {
    153. Directory.CreateDirectory(path);
    154. }
    155. }
    156. }
    157. }
  2. @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

  3. 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();
                    }
                }
            }
×
×
  • Neu erstellen...