![]() |
|
Модераторы: gambit |
![]()
|
|
| sindi8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 6.6.2005 Где: Москва Репутация: нет Всего: нет |
Всем привет.
Подскажите пожалуйста, как разобраться с проблемой. Есть веб-сервис, в нем метод сохранения данных в файл, в который передается массив данных byte[]. Данные большие - мегов по 200. Хотелось бы сделать прогрес-бар, который показывал сколько данных уже ушло. Сам я что-то загнался... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Ничего себе "запрос" получится к веб-серверу...
Можно отправлять данные пачками, например по 500Кб. В случае ошибки можно передать данные повторно. После передачи каждой пачки можно двигать прогрессбар. -------------------- ![]() |
|||
|
||||
| sindi8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 6.6.2005 Где: Москва Репутация: нет Всего: нет |
ну да, есть немного... =) Другого способа выложить данные на сервак не придумал. Точнее как - придумал конечно, через БД, но это все-таки не совсем то. воооот, как сделать так чтоб передавать пачками? я в стопор уже вошел - сообразить не могу. Делаю так:
Это и есто то самое "пачками"? или мне как-то надо все это организовать руками? и как тогда считать переданные части - в ассинхронный поток таймер повесит? или что? я понимаю одно - чего-то я недопонял. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Вот возможный сценарий передачи данных блоками:
1) на серваке завести поток, управляющий сессиями: каждая "сессия" - это объект определённого класса, накапливающий данные, все сессии живут в одном Hashtable, каждая сессия идентифицируется числовым ID или GUID-ом; 2) на том же серваке завести веб-сервис с тремя методами: - int BeginSession(int summaryLen) - создаёт объект "сессия" с заданной суммарной длиной данных, возвращает ID сессии (или можно GUID) - bool TransferData(int ID, int offset, byte[] data) - принимает пачку данных произвольной длины, накапливая данные в сессии с заданным ID-ом, например дописывая данные во временный файл (предпочтительный вариант); если вернёт false либо свалится с тайм-аутом, клиент вызывает TransferData повторно для той же пачки; параметр offset служит для точного указания серверу, с какой позиции начинается пачка (может служить дополнительной проверкой корректной последовательности передачи данных) - EndSession(ID) - завершает приём данных; поток, управляющий сессиями, удаляет данную сессию из Hashtable и сохраняет принятые данные в постоянный файл 3) клиент у себя делит файл на пачки равной либо различающейся длины и скармливает их серверу; перед стартом передачи вызывается метод BeginSession; для передачи очередной пачки - TransferData; для окончания передачи - EndSession -------------------- ![]() |
|||
|
||||
| sindi8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 6.6.2005 Где: Москва Репутация: нет Всего: нет |
Спасибо. Все получилось.
Правда сессии никчему здесь. Можно обойтись одним методом. Передавать в него непосредственно данные, имя файла (у меня оно генерится как guid) и общий размер файла - если переданы все данные (размер временного файла равен размеру исходного) - временный файл убивается, постоянный создается. Главная цель достигнута - прогрессбар бегает! И никаких залипов при передаче больших файлов. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Отлично
Я практически то же самое имел ввиду -------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |