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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WebClient, Глючит? 
:(
    Опции темы
Felixx
Дата 22.8.2012, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет, как то странно работает веб клиент...
Первые 2 файла качает нормально..
когда начинает качать следущий как тока прошол коннект, сразу же для етого файла выполняется комплит..

Прога делает примерно следущее:
Скачиваем файл, как только скачали - распаковываем. Как только распаковали, удаляем архив. Впринципе самый обычный Updater файлов.

Вот логи проги:
1)
Код

======================
Начинаю качать файл: http://localhost:8080/update/xml_dir.7z в файл: D:\DONLOADS\games\pbupdate\xml_dir.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\xml_dir.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\xml_dir.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\xml_dir.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\xml_dir.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\xml_dir.7z; path: D:\DONLOADS\games\pbupdate\xml_dir.7z
======================
Начинаю качать файл: http://localhost:8080/update/1.7z в файл: D:\DONLOADS\games\pbupdate\1.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\1.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\1.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\1.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\1.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\1.7z; path: D:\DONLOADS\games\pbupdate\1.7z
======================
Начинаю качать файл: http://localhost:8080/update/2.7z в файл: D:\DONLOADS\games\pbupdate\2.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\2.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\2.7z; path: D:\DONLOADS\games\pbupdate\2.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\2.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\2.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\2.7z
======================
Начинаю качать файл: http://localhost:8080/update/3.7z в файл: D:\DONLOADS\games\pbupdate\3.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\3.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\3.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\3.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\3.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\3.7z; path: D:\DONLOADS\games\pbupdate\3.7z


2) Ещщоо хужее !!
Код

Начинаю качать файл: http://localhost:8080/update/xml_dir.7z в файл: D:\DONLOADS\games\pbupdate\xml_dir.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\xml_dir.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\xml_dir.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\xml_dir.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\xml_dir.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\xml_dir.7z; path: D:\DONLOADS\games\pbupdate\xml_dir.7z
========================
Начинаю качать файл: http://localhost:8080/update/1.7z в файл: D:\DONLOADS\games\pbupdate\1.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\1.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\1.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\1.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\1.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\1.7z; path: D:\DONLOADS\games\pbupdate\1.7z
========================
Начинаю качать файл: http://localhost:8080/update/2.7z в файл: D:\DONLOADS\games\pbupdate\2.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\2.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\2.7z; path: D:\DONLOADS\games\pbupdate\2.7z
========================
Начинаю качать файл: http://localhost:8080/update/3.7z в файл: D:\DONLOADS\games\pbupdate\3.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\3.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\3.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\3.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\3.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\3.7z; path: D:\DONLOADS\games\pbupdate\3.7z
========================
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\3.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\3.7z
ProgressChanged для файла: D:\DONLOADS\games\pbupdate\3.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\3.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\3.7z; path: D:\DONLOADS\games\pbupdate\3.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\3.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\3.7z; path: D:\DONLOADS\games\pbupdate\3.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\3.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\3.7z; path: D:\DONLOADS\games\pbupdate\3.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\3.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\3.7z; path: D:\DONLOADS\games\pbupdate\3.7z
DownloadFileCompleted для файла: D:\DONLOADS\games\pbupdate\3.7z
goUnZip для файла: D:\DONLOADS\games\pbupdate\3.7z; path: D:\DONLOADS\games\pbupdate\3.7z



Код такой:
1) Вызываем скачивание
Код

            DManager.Instance.addToLoad(serv.updateurl + "/" + serv.updatefile, RConfig.Instance.PBDirectory + @"\" + serv.updatefile, serv.updatefile);
            for (int i = 1; i < 4; i++)
            {
                DManager.Instance.addToLoad(serv.updateurl + "/" + i + ".7z", RConfig.Instance.PBDirectory + @"\" + i + ".7z", i + ".7z");
            }


2) DManager
Код

using System;
using System.Collections.Generic;
using MMoNetworkUpdater.forms;
using System.Windows.Forms;
using System.Text;
using System.Runtime.CompilerServices;
using log4net;

namespace MMoNetworkUpdater
{
    class DManager
    {
        private static readonly ILog _log = LogManager.GetLogger(typeof(MainForm));
        private static DManager _instance;
        public static DManager Instance
        {
            get { return _instance ?? (_instance = new DManager()); }
        }

        private System.Net.WebClient webClient = new System.Net.WebClient();//Определяем

        [MethodImpl(MethodImplOptions.Synchronized)]
        public void load(Uri webFile, string fSystemFile, string fName)
        {
            MainForm.Instance.label2.Text = fSystemFile;
            //MessageBox.Show("START uri:" + webFile.AbsoluteUri + "; file: " + fSystemFile);
            try
            {
                _log.Info("Начинаю качать файл: " + webFile.AbsoluteUri + " в файл: " + fSystemFile);
                webClient.DownloadFileAsync(webFile, fSystemFile);//сохраняем фаил под именем
            }
            catch (NotSupportedException ex)
            {
                new MessageForm(ex);
            }
            //Следующей строчкой задаем заполнение и привязку к действию
            webClient.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
            webClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(webClient_DownloadFileCompleted);
        }

        void webClient_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
        {
            MainForm.Instance.label1.Text = String.Format("Загружено: {0} Кбайт / {1} Кбайт, {2} %", e.BytesReceived / 1024, e.TotalBytesToReceive / 1024, e.ProgressPercentage);//Выводим в лейбл информацию о процессе загрузки
            MainForm.Instance.progressOne.Value = e.ProgressPercentage;// заполняем
            //MainForm.Instance.label3.Text = String.Format("{0} %", e.BytesReceived);
            _log.Info("ProgressChanged для файла: " + MainForm.Instance.label2.Text);
        }

        void webClient_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            //MessageBox.Show("unzip:" + MainForm.Instance.label2.Text);
            _log.Info("DownloadFileCompleted для файла: " + MainForm.Instance.label2.Text);
            MainForm.Instance.goUnZip(MainForm.Instance.label2.Text);
            MainForm.Instance.progressOne.Value = 0; //сброс progressBar
            //MainForm.Instance.label3.Text = ""; // сброс лейбл

            MainForm.Instance.label3.Text = String.Format("{0} %", _list == null ? 100 : 100 / _list.Count);
            MainForm.Instance.progressAll.Value = _list == null ? 0 : 100 / _list.Count;// заполняем

            if (_list != null && _list.Count > 0)
            {
                string[] array = _list[0];
                //MessageBox.Show("complited, next: " + array[2]);
                load(new Uri(array[0]),array[1],array[2]);
                _list.RemoveAt(0);

                if (_list.Count == 0)
                {
                    MainForm.Instance.BTN_PLAY.Enabled = true;
                    MainForm.Instance.BTN_UPDATE.Enabled = false;
                    MainForm.Instance.progressAll.Value = 0;
                    _list = null;
                }
            }
        }

        private List<string[]> _list;
        public void addToLoad(string s0,string s1, string s2)
        {
            if (_list == null)
            {
                _list = new List<string[]>();
                load(new Uri(s0), s1, s2);
            }
            else
            {
                _list.Add(new string[3] { s0, s1, s2 });
            }
        }
    }
}


Изза чего такое может происходить, что не так ? :(


Это сообщение отредактировал(а) Felixx - 22.8.2012, 20:06
PM MAIL   Вверх
Felixx
Дата 22.8.2012, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если что то вот все:
http://rghost.ru/39940088
PM MAIL   Вверх
diadiavova
Дата 22.8.2012, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Felixx, просмотрел код поверхностно, насколько я понял, ты здесь в цикле запрашиваешь файлы асинхронно, то есть они качаются в несколько потоков. Здесь могут быть ограничения на максимальное количество потоков, как со стороны сервера, так и со стороны клиента. Ограничения со стороны клиента определяются в конфигурации приложения следующим образом
http://msdn.microsoft.com/ru-ru/library/fb6y0fyc.aspx
Попробуй увеличить максимальное количество подключений.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Felixx
Дата 22.8.2012, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не, не помогает :(
PM MAIL   Вверх
diadiavova
Дата 22.8.2012, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Felixx @  22.8.2012,  23:16 Найти цитируемый пост)
Не, не помогает :( 

А  что именно ты прописал?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Felixx
Дата 22.8.2012, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
<system.net>
    <connectionManagement>
      <add address = "*" maxconnection = "10" />
    </connectionManagement>
  </system.net>
</configuration>



Добавлено через 6 минут и 11 секунд
Чую, где то в логике программы косяк. Ибо начинаются глюки именно со 2го файла..
если 1 файл то все норм....
а пропотоки, разве это не решит проблему?

Код

 [MethodImpl(MethodImplOptions.Synchronized)]
        public void load(Uri webFile, string fSystemFile, string fName)
        {

PM MAIL   Вверх
diadiavova
Дата 22.8.2012, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Попробуй внести строку
Код

System.Net.WebClient webClient = new System.Net.WebClient();//Определяем
В код метода load. Возможно это ограничение самого вебклиента, ты ведь все закачки выполняешь с помощью одного экземпляра.

Это сообщение отредактировал(а) diadiavova - 22.8.2012, 22:37


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Felixx
Дата 22.8.2012, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ох, и правда.. заработало! Странно, раньше я так делал ноне помогало..но я там уже много чего переделал..
Всеравно, огромное спасибо! 
Жаль что 100 постов ешо не набил, поставил бы + smile
PM MAIL   Вверх
diadiavova
Дата 22.8.2012, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Felixx @  22.8.2012,  23:40 Найти цитируемый пост)
Странно, раньше я так делал ноне помогало..

Ну ты же в конфигурацию внес изменения. Не? smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Felixx
Дата 22.8.2012, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Дак я уже назад удалил))
Сделал просто так вот:

Код

        [MethodImpl(MethodImplOptions.Synchronized)]
        public void load(Uri webFile, string fSystemFile, string fName)
        {
            using (System.Net.WebClient webClient = new System.Net.WebClient()) //Определяем
            {
                MainForm.Instance.label2.Text = fSystemFile;
                //MessageBox.Show("START uri:" + webFile.AbsoluteUri + "; file: " + fSystemFile);
                try
                {
                    _log.Info("Начинаю качать файл: " + webFile.AbsoluteUri + " в файл: " + fSystemFile);
                    webClient.DownloadFileAsync(webFile, fSystemFile);//сохраняем фаил под именем
                }
                catch (NotSupportedException ex)
                {
                    new MessageForm(ex);
                }
                //Следующей строчкой задаем заполнение и привязку к действию
                webClient.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
                webClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(webClient_DownloadFileCompleted);
            }
        }

PM MAIL   Вверх
diadiavova
Дата 22.8.2012, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Felixx @  22.8.2012,  23:49 Найти цитируемый пост)
Дак я уже назад удалил))

Ну я, честно говоря, не знаю сколько там коннекшнов дается по умолчанию smile Обычно если не хватает - можно добавить smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Felixx
Дата 22.8.2012, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да я чото вообще ни понел в чем прикол того, что низя один и тот же клиент юзать несколько раз..
странная неведомая штука кака я то smile

Добавлено через 3 минуты и 39 секунд
Кстати, а не лучше ли запускать скачку в отдельном потоке через backgroundWorker ? Штоб форма и компоненты вдруг не подвисли нечайно?)
PM MAIL   Вверх
diadiavova
Дата 22.8.2012, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Felixx @  23.8.2012,  00:02 Найти цитируемый пост)
Да я чото вообще ни понел в чем прикол того, что низя один и тот же клиент юзать несколько раз..
странная неведомая штука кака я то 

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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Felixx
Дата 22.8.2012, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А, ну ясно .. smile А что на счет отдельного потока для скачки?
PM MAIL   Вверх
diadiavova
Дата 22.8.2012, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Felixx @  23.8.2012,  00:12 Найти цитируемый пост)
 А что на счет отдельного потока для скачки? 

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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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