Jump to content

FtpWebRequest C# on Windows Server 2019


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

Empfohlene Beiträge

 

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. }
bearbeitet von ChristianErdtmann
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!
Gast
Dieses Thema wurde für weitere Antworten geschlossen.
×
×
  • Neu erstellen...