Может ли кто-нибудь помочь, пожалуйста?
Пытаюсь написать настольное приложение на 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
System.Net.WebException: удаленный сервер возвратил ошибку: (426) Соединение закрыто ⇐ C#
Место общения программистов C#
1766290838
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);
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79852106/system-net-webexception-the-remote-server-returned-an-error-426-connection-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия