System.Net.WebException: удаленный сервер возвратил ошибку: (426) Соединение закрытоC#

Место общения программистов C#
Ответить
Anonymous
 System.Net.WebException: удаленный сервер возвратил ошибку: (426) Соединение закрыто

Сообщение Anonymous »

Может ли кто-нибудь помочь, пожалуйста?
Пытаюсь написать настольное приложение на C#, которое будет получать доступ к FTP-серверу и извлекать файлы.
Для разработки у меня есть один удаленный FTP-сервер и один в моей локальной сети.
Я могу получить доступ к обоим с помощью Filezilla (клиент) без проблем.
C# выдает ошибку 426 при подключении к обоим серверам. Я написал приложение, используя интерфейсы System.Net и FluentFTP. Идентичные результаты.
Брандмауэр Windows 10 отключен, но если бы он блокировался, он наверняка заблокировал бы мой код и Filezilla (клиент).
Что еще я мог бы упустить из виду?
Полная ошибка:
System.Net.WebException: The remote server returned an error: (426) Connection closed; transfer aborted.
atSystem.Net.FtpWebRequest.SyncRequestCallback(Object obj)
atSystem.Net.FtpWebRequest.RequestCallback(Object obj)
atSystem.Net.CommandStream.Dispose(Boolean disposing)
atSystem.IO.Stream.Close()
atSystem.IO.Stream.Dispose()
atSystem.Net.ConnectionPool.Destroy(PooledStream pooledStream)
atSystem.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
atSystem.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
atSystem.Net.FtpWebRequest.SyncRequestCallback(Object obj)
atSystem.Net.FtpWebRequest.RequestCallback(Object obj)
atSystem.Net.CommandStream.Abort(Exception e)
atSystem.Net.CommandStream.CheckContinuePipeline()
atSystem.Net.FtpWebRequest.DataStreamClosed(CloseExState closeState)
atSystem.Net.FtpDataStream.System.Net.ICloseEx.CloseEx(CloseExState closeState)
atSystem.Net.FtpDataStream.Dispose(Boolean disposing)
atSystem.IO.Stream.Close()
atSystem.Net.FtpDataStream.Read(Byte[] buffer, Int32 offset, Int32 size)
atSystem.IO.Stream.InternalCopyTo(Stream destination, Int32 bufferSize)
atSystem.IO.Stream.CopyTo(Stream destination)
atDealFoundry_Scheduler.Form_Main.Process_FTP_Pull(Document Feed) in C:\Development\DF24\DF24_Scheduler\DealFoundry Scheduler\Form_Main.cs:line 799

Код следует, хотя интуиция подсказывает мне, что ошибка где-то в другом месте:
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);
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... nnection-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»