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

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

Сообщение Anonymous »

Кто-нибудь может помочь?
Я пытаюсь написать настольное приложение C#, которое будет получать доступ к FTP-серверу и получать файл. Для разработки у меня есть один удаленный FTP-сервер и один в моей локальной сети.
Я могу получить доступ к обоим с помощью Filezilla (клиента).
Код C# выдает ошибку http 426 при подключении к обоим серверам. Я написал приложение, используя интерфейсы System.Net и FluentFTP. Идентичные результаты.
Брандмауэр Windows 10 отключен, но если бы он блокировался, он наверняка заблокировал бы мой код и Filezilla (клиент).
Что еще я мог упустить из виду?
Полная ошибка:

System.Net.WebException: удаленный сервер возвратил ошибку: (426) Соединение закрыто; передача прервана.
at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)

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

at System.Net.CommandStream.Dispose(Boolean dispositing)

at System.IO.Stream.Close()

at System.IO.Stream.Dispose()

at System.Net.ConnectionPool.Destroy(PooledStream PooledStream)

at System.Net.ConnectionPool.PutConnection(PooledStream PooledStream, Object owningObject, Int32 CreationTimeout, Boolean canReuse)

at System.Net.FtpWebRequest.FinishRequestStage(этап RequestStage)

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

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

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

at System.Net.CommandStream.CheckContinuePipeline()

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

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

at System.Net.FtpDataStream.Dispose(Boolean) удаление)

в System.IO.Stream.Close()

в System.Net.FtpDataStream.Read(буфер Byte[], смещение Int32, размер Int32)

в System.IO.Stream.InternalCopyTo(назначение потока, Int32ufferSize)

в System.IO.Stream.CopyTo(назначение потока)

at DealFoundry_Scheduler.Form_Main.Process_FTP_Pull(Document Feed) в 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#»