System.Net.WebException: Der Remote-Server hat einen Fehler zurückgegeben: (426) Verbindung geschlossenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 System.Net.WebException: Der Remote-Server hat einen Fehler zurückgegeben: (426) Verbindung geschlossen

Post by Anonymous »

Kann bitte jemand helfen?
Ich versuche, eine C#-Desktop-App zu schreiben, die auf einen FTP-Server zugreift und eine Datei abruft. Für die Entwicklung habe ich einen Remote-FTP-Server und einen in meinem LAN.
Ich kann mit Filezilla (Client) problemlos auf beide zugreifen.
Der C#-Code erzeugt einen http 426-Fehler, wenn eine Verbindung zu beiden Servern hergestellt wird. Ich habe die App mit den Schnittstellen System.Net und FluentFTP geschrieben. Identische Ergebnisse.
Die Windows 10-Firewall ist ausgeschaltet, aber wenn sie blockieren würde, würde sie sicherlich meinen Code und Filezilla (Client) blockieren.
Was könnte ich sonst noch übersehen?
Der vollständige Fehler lautet:

System.Net.WebException: Der Remote-Server hat einen Fehler zurückgegeben: (426) Verbindung geschlossen; Übertragung abgebrochen.
bei System.Net.FtpWebRequest.SyncRequestCallback(Object obj)

bei System.Net.FtpWebRequest.RequestCallback(Object obj)

bei System.Net.CommandStream.Dispose(Boolean dispose)

bei System.IO.Stream.Close()

at System.IO.Stream.Dispose()

bei System.Net.ConnectionPool.Destroy(PooledStream pooledStream)

bei System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32creationTimeout, Boolean canReuse)

bei System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)

bei System.Net.FtpWebRequest.SyncRequestCallback(Object obj)

bei System.Net.FtpWebRequest.RequestCallback(Object obj)

bei System.Net.CommandStream.Abort(Exception e)

bei System.Net.CommandStream.CheckContinuePipeline()

bei System.Net.FtpWebRequest.DataStreamClosed(CloseExState closeState)

bei System.Net.FtpDataStream.System.Net.ICloseEx.CloseEx(CloseExState closeState)

bei System.Net.FtpDataStream.Dispose(Boolean dispose)

bei System.IO.Stream.Close()

bei System.Net.FtpDataStream.Read(Byte[]-Puffer, Int32-Offset, Int32-Größe)

bei System.IO.Stream.InternalCopyTo(Stream-Ziel, Int32-Puffergröße)

bei System.IO.Stream.CopyTo(Stream-Ziel)

bei DealFoundry_Scheduler.Form_Main.Process_FTP_Pull(Dokument-Feed) in C:\Development\DF24\DF24_Scheduler\DealFoundry Scheduler\Form_Main.cs:line 799

Code folgt, obwohl mein Bauchgefühl mir sagt, dass der Fehler woanders liegt:

Code: Select all

string ftpUrl = "ftp://192.168.1.10";
string username = "tester";
string password = "password";

// List files in remote directory
FtpWebRequest dirRequest = (FtpWebRequest)WebRequest.Create(ftpUrl);
dirRequest.Method = WebRequestMethods.Ftp.ListDirectory;
dirRequest.Credentials = new NetworkCredential(username, password);
dirRequest.UsePassive = true;
dirRequest.UseBinary = true;
dirRequest.EnableSsl = ftpUrl.ToLower().StartsWith("ftps");
dirRequest.KeepAlive = false;

using (FtpWebResponse dirResponse = (FtpWebResponse)dirRequest.GetResponse())
using (Stream dirStream = dirResponse.GetResponseStream())
using (StreamReader reader = new StreamReader(dirStream))
{
while (!reader.EndOfStream)
{
string fileName = reader.ReadLine();
string fileUrl = ftpUrl.TrimEnd('/') + "/"  + fileName;

// Download file with retry logic
MemoryStream downloadStream = new MemoryStream();

FtpWebRequest fileRequest = (FtpWebRequest)WebRequest.Create(fileUrl);
fileRequest.Method = WebRequestMethods.Ftp.DownloadFile;
fileRequest.Credentials = new NetworkCredential(username, password);
fileRequest.UsePassive = true;
fileRequest.UseBinary = true;
fileRequest.KeepAlive = false;
fileRequest.Timeout = 60000;
fileRequest.ReadWriteTimeout = 60000;
fileRequest.EnableSsl = ftpUrl.ToLower().StartsWith("ftps");

using (FtpWebResponse fileResponse = (FtpWebResponse)fileRequest.GetResponse())
using (Stream fileStream = fileResponse.GetResponseStream())
{
fileStream.CopyTo(downloadStream);
downloadStream.Position = 0;
}

string fileExtension = Path.GetExtension(fileName).ToLower();

// Handle ZIP files
if (fileExtension == ".zip")
{
using (ZipArchive archive = new ZipArchive(downloadStream, ZipArchiveMode.Read))
{
foreach (var entry in archive.Entries)
{
using (var entryStream = entry.Open())
{
Upload_Stream(entryStream, Feed["Feed_Web_URL"], Feed["Feed_Account_Link"], Feed["Feed_Supplier_Link"]);
Post_FTP_Pull($"{DateTime.UtcNow:F} : Un-Zipped file {entry.FullName}");
}
}
}
}
else
{
Upload_Stream(downloadStream, fileName, Feed["Feed_Account_Link"], Feed["Feed_Supplier_Link"]);
}

Post_FTP_Pull($"{DateTime.UtcNow:F} : FTP Pull File : {fileName}");

// Delete source file if required

if ((bool)Feed["Feed_Pull_Delete"])
{
try
{
FtpWebRequest deleteRequest = (FtpWebRequest)WebRequest.Create(fileUrl);
deleteRequest.Method = WebRequestMethods.Ftp.DeleteFile;
deleteRequest.Credentials = new NetworkCredential(username, password);
deleteRequest.UsePassive = true;
deleteRequest.KeepAlive = false;

//*** disable during development            using (FtpWebResponse deleteResponse = (FtpWebResponse)deleteRequest.GetResponse()) { }
}
catch (Exception Ex)
{
string[] Messages = new string[] { Ex.ToString() };
Error_Message.Send_Error_eMail(Messages);
}
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post