FtpWebRequest при закрытии потока загрузки зависает на больших файлах

Я пытаюсь использовать FtpWebRequest для загрузки некоторых файлов. Это работает для небольших файлов (скажем, <2 МБ), но когда я пытаюсь загрузить файл размером 16 МБ, файлы загружаются успешно, но когда я вызываю request.GetRequestStream (). Close, код зависает (или истекает время ожидания, если время ожидания мало достаточно).

Я мог бы просто а) не закрывать его и б) не беспокоиться о получении ответа от сервера, но это кажется неправильным! См. Код ниже (с использованием SSL или без него возникает та же проблема.)

output.Close () - это строка, которая зависает ....

    public static void SendFileViaFtp(string file, string url, bool useSsl, ICredentials credentials)
    {

        var request = (FtpWebRequest)WebRequest.Create(url + Path.GetFileName(file));
        request.EnableSsl = useSsl;
        request.UseBinary = true;
        request.Credentials = credentials;

        request.Method = WebRequestMethods.Ftp.UploadFile;

        request.Timeout = 10000000;
        request.ReadWriteTimeout = 10000000;
        request.KeepAlive = true;

        var input = File.Open(file, FileMode.Open);
        var output = request.GetRequestStream();

        var buffer = new byte[1024];
        var lastBytesRead = -1;
        var i = 0;
        while (lastBytesRead != 0)
        {
            i++;
            lastBytesRead = input.Read(buffer, 0, 1024);
            Debug.WriteLine(lastBytesRead + " " + i);
            if (lastBytesRead > 0)
            {
                output.Write(buffer, 0, lastBytesRead);
            }else
            {
                Debug.WriteLine("Finished");
            }
        }
        input.Close();
        output.Close();

        var response = (FtpWebResponse)request.GetResponse();
        response.Close();
    }

Спасибо,

7
задан MT. 16 December 2010 в 16:16
поделиться