Основное соединение было закрыто: при получении произошла непредвиденная ошибка - PullRequest
4 голосов
/ 17 мая 2009

Когда я пробую свою программу на моей машине с win2k8, она работает нормально, но на win 2k3 выдает это сообщение об ошибке

вот код, который 'генерирует ошибку

WebClient wc = new WebClient(); 
wc.DownloadFile("ftp://ftp.website.com/sample.zip");

есть странная часть. если я полностью отключу брандмауэр на сервере. ошибка уходит. но все равно выдает ошибку, если я добавляю программу в список исключений и включаю брандмауэр.

имейте поиск в сети в течение нескольких дней, не можете найти никакого решения.

Ответы [ 3 ]

6 голосов
/ 18 мая 2009

Вы должны попробовать использовать пассивный режим для FTP. Класс WebClient не позволяет этого, но FtpWebRequest делает.

FtpWebRequest request = WebRequest.Create("ftp://ftp.website.com/sample.zip") as FtpWebRequest;
request.UsePassive = true;
FtpWebResponse response = request.GetResponse() as FtpWebResponse;
Stream ftpStream = response.GetResponse();
int bufferSize = 8192;
byte[] buffer = new byte[bufferSize];
using (FileStream fileStream = new FileStream("localfile.zip", FileMode.Create, FileAccess.Write))
{
    int nBytes;
    while((nBytes = ftpStream.Read(buffer, 0, bufferSize) > 0)
    {
        fileStream.Write(buffer, 0, nBytes);
    }
}
1 голос
/ 06 октября 2009

У меня была похожая проблема (без ftp) и другое решение

Рабочая среда сервера была сделана настолько безопасной, что сервер не мог получить доступ к URL.

Быстрый тест - использовать браузер на коробке и посмотреть, сможете ли вы перейти к URL.

Надеюсь, это кому-нибудь поможет.

1 голос
/ 18 мая 2009

Пожалуйста, опубликуйте полное исключение, включая любое InnerException:

try
{
    WebClient wc = new WebClient(); 
    wc.DownloadFile("ftp://ftp.website.com/sample.zip");
}
catch (Exception ex)
{
    Console.WriteLine(ex.ToString()); // Or Debug.Trace, or whatever
    throw;    // As if the catch were not present
}
...