Ftp Upload дает исключение Невозможно записать данные в транспортное соединение.Существующее соединение было принудительно закрыто удаленным хостом - PullRequest
1 голос
/ 06 января 2012

У меня есть приложение Windows Form, в котором я использую фоновый рабочий для загрузки файлов ftp.После успешной загрузки 209 файлов он выдал ошибку в файле размером всего 7,8 КБ, что While Processing Img1.jpg Unable to write data to the transport connection. An existing connection was forcibly closed by the remote host.

string uri1;

ftpInfoUpload = LoadHostedSiteData(hs);
ftpInfoUpload[5] = imgRow["Filename"].ToString();

uri1 = String.Format("ftp://{0}/{1}/images/{2}", ftpInfoUpload[1], ftpInfoUpload[2], ftpInfoUpload[5]);

requestUpload = (FtpWebRequest)WebRequest.Create(uri1);
requestUpload.UsePassive = false;
requestUpload.UseBinary = true;
requestUpload.Method = WebRequestMethods.Ftp.UploadFile;
requestUpload.Credentials = new NetworkCredential(ftpInfoUpload[3], ftpInfoUpload[4]);


requestUpload.ContentLength = memStream.Length;
byte[] buff = new byte[bufferSize];
int contentLen;

// Stream to which the file to be upload is written
Stream strm = requestUpload.GetRequestStream();
memStream.Seek(0, SeekOrigin.Begin);
contentLen = memStream.Read(buff, 0, bufferSize);
                            // Till Stream content ends
while (contentLen > 0)
{   
    // Write Content from the file stream to the FTP   Upload Stream
    strm.Write(buff, 0, contentLen);
    contentLen = memStream.Read(buff, 0, bufferSize);
}

//Close the file stream and the Request Stream
strm.Close();
strm.Dispose();
ftpStream.Close();
memStream.Close();
//responseUpload.Close();
responseDownload.Close();

И идеи, что происходит?

1 Ответ

1 голос
/ 04 февраля 2012

Я установил ftprequest.KeepAlive=true и установил ftprequest.ConnectionGroupName = "Some Value", так что базовый код не должен создавать новое соединение с тем же ftp-сервером.Я нашел это решение здесь .Я также нашел это полезным.Также следите за тем, чтобы не создавать новый объект NetworkCredential при каждой передаче файла, который может вызвать исключение.Я проверил мой код дважды, передавая 300 файлов, и, кажется, работает отлично и быстро.Настройка KeepAlive=false может сделать передачу медленной

...