Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с загрузкой по ftp, Только у одного пользователя 
V
    Опции темы
Track
Дата 14.3.2013, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 18.2.2010

Репутация: нет
Всего: нет



Сейчас утилитой пользуются около десятка пользователей, но только у одного проблема при загрузке файла размером около 70ти мегабайт.
Файлы меньшего размера у него загружаются.
Любопытно то, что файл полностью загружается на сервер (проверил именно загружаемый им архив - архив нормальный, небитый), затем несколько минут у пользователя показывается состояние загрузки 100%, а потом выскакивает сообщение об ошибке - "Базовое соединение закрыто: непредвиденная ошибка при приеме".

Код

    private void UploadWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            long Offset = (long)e.Argument;
            string ftpMethod;

            if (Offset > 0)
                ftpMethod = WebRequestMethods.Ftp.AppendFile;
            else
                ftpMethod = WebRequestMethods.Ftp.UploadFile;

            System.Uri uploadUri = new System.Uri(WebData.GetUploadAddress(this.FtpFolder, this.User.ID, this.SceneZipFileName));

            var ftpWebRequest = (FtpWebRequest)WebRequest.Create(uploadUri);
            ftpWebRequest.Method = ftpMethod;
            ftpWebRequest.KeepAlive = false;

            ftpWebRequest.Credentials = WebData.GetFtpCredential();

            using (var inputStream = File.OpenRead(this.SceneZipFileName))
            {
                long in_stream_lenght = inputStream.Length;
                if (Offset > 0)
                    inputStream.Seek(Offset, SeekOrigin.Begin);

                try
                {
                    using (var outputStream = ftpWebRequest.GetRequestStream())
                    {
                        var buffer = new byte[1024 * 1024];
                        int readBytesCount;
                        while ((readBytesCount = inputStream.Read(buffer, 0, buffer.Length)) > 0 && !e.Cancel && !UploadWorker.CancellationPending && !CancelUploadDownload)
                        {
                            outputStream.Write(buffer, 0, readBytesCount);
                            var progress = inputStream.Position * 100.0 / in_stream_lenght;
                            UploadWorker.ReportProgress((int)progress);
                        }
                    }
                }
                catch (Exception ex)
                {
                    e.Cancel = true;
                    MessageBox.Show(ex.GetBaseException().Message, "Error!!!");
                }
            }
        }

PM MAIL WWW   Вверх
Track
Дата 22.3.2013, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 18.2.2010

Репутация: нет
Всего: нет



В итоге все решилось установкой свойства

UsePassive = true;

PM MAIL WWW   Вверх
Machaon
Дата 23.3.2013, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КаРолЬ АсьКи МуАЛя
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 12.8.2008
Где: М.о. Красногорск

Репутация: нет
Всего: 3



Все зависит от типа подключение к сети пользователя.
К примеру режим Active при подключение через роутер(маршрутизатор) требует дополнительной настройки (прокидывание портов).

Поэтому мой совет реализуй проверку типа подключения и напиши класс для работы с ними.
PM MAIL ICQ Skype   Вверх
Track
Дата 27.3.2013, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 18.2.2010

Репутация: нет
Всего: нет



Спасибо, но совсем непонятно.
PM MAIL WWW   Вверх
baldina
Дата 27.3.2013, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Да, непонятно. Не по теме. Если клиент может работать только в пассивном режиме, вообще передачи не было бы.
Похоже, что в активном режиме сервер не закрывает соединение после передачи.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0828 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.