Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Большой объем данных в ответе / 10 сообщений из 10, страница 1 из 1
29.10.2015, 14:55
    #39090140
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой объем данных в ответе
Подскажите, как реализовать метод сервиса, который будет отдавать большой объем данных?
Порядка 100МБ.

Только через Stream?

Сам метод возвращает простой IEnumerable<Object>, просто очень много строк.
...
Рейтинг: 0 / 0
29.10.2015, 18:39
    #39090447
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой объем данных в ответе
>Pavluha, сегодня, 14:55 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1182356&msg=18343956][18343956]
>Только через Stream?

Можно попытаться сериализовать объект данных в бинарный файл и упаковать его. Пользователю вернуть имя файла. Затем в цикле порциями перенести на комп и сделать обратные операции.

С уважением,
Владимир
...
Рейтинг: 0 / 0
30.10.2015, 12:33
    #39090973
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой объем данных в ответе
PavluhaПодскажите, как реализовать метод сервиса, который будет отдавать большой объем данных?
Порядка 100МБ.

Только через Stream?

Сам метод возвращает простой IEnumerable<Object>, просто очень много строк.

передавать частями и принимать частями, например, сделать два разных метода для нормальных данных и больших и т.д..
...
Рейтинг: 0 / 0
03.11.2015, 15:50
    #39093889
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой объем данных в ответе
Pavluha,

А что именно беспокоит? Что разовый объем слишком большой (проблемы с буфером, с трансляцией в сети) или что в принципе много объектов?

В целом, если это позволяет задача, я бы пошел по пути пейджинга (т.е. постраничной передачи данных). Вариантов реализации много, зависят от задачи и того, как данные формируюутся внутри.

Навскидку:
- при запросе вы передаете параметры фильтрации и параметры пейджинга (сколько объектов на странице и её номер). Для получения каждой последующей порции просто увеличиваете номер страницы (остальные данные не меняются!).
Основная сложность метода - нужно соблюдать параметры выборки и фильтрации объектов (иначе один и тот же объект можно получить дважды).
Вторая беда - что делать, если за время пока вы получаете выборку, в неё добавились новые элементы (если задача просто показать на UI, это не так страшно, но если вы обрабатываете данные, то надо вручную удалять дубликаты).

- выборка получается 2-я методами. Первый получает параметры запроса и возвращает id результата. Второй - передает id и последовательно вытягивает всю выборку (при каждом обращении получает следуюущую порцию).
...
Рейтинг: 0 / 0
09.11.2015, 11:13
    #39098102
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой объем данных в ответе
МихаилРВторая беда - что делать, если за время пока вы получаете выборку, в неё добавились новые элементы (если задача просто показать на UI, это не так страшно, но если вы обрабатываете данные, то надо вручную удалять дубликаты).


Ну, можно отслеживать, что версия файла не изменилась в процессе передачи.

В СУБД на этом построены транзакции (см "XSN. Transaction sequence number")
...
Рейтинг: 0 / 0
12.11.2015, 15:35
    #39101944
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой объем данных в ответе
Постранично не получится, отдавать надо все.

Почитал тут про сжатие. Есть какой-нибудь способ ужать ответ например так, чтобы он стал не 200, а намного меньше?
...
Рейтинг: 0 / 0
12.11.2015, 16:40
    #39102055
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой объем данных в ответе
PavluhaПочитал тут про сжатие. Есть какой-нибудь способ ужать ответ например так, чтобы он стал не 200, а намного меньше?

Вы хотите уменьшить именно объем пересылаемого сообщения?
Да, можно попробовать поиграться со сжатием и методом кодирования.

Правда нюансов довольно много (а я не эксперт - в проектах нам никогда не требовалось такое поведение, поэтому я вопрос пристально не изучал).

А нюансы проистекают из того:
- какой у вас хостинг. В случае IIS, можно использовать его модуль сжатия (вот, например, вопрос на SO о настройке сжатия средствами IIS
- какая версия WCF (.Net). В частности в 4.5 была добавлена возможность использовать сжатие потока и Binary сериализация опять же, сошлюсь на Stack Overflow .
- для ранних версий WCF и варианта self-hosting есть довольно много расширений транспортного уровня с поддержкой GZip, например, можно посмотреть пример самого MS Custom Message Encoder: Compression Encoder
...
Рейтинг: 0 / 0
12.11.2015, 17:14
    #39102096
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой объем данных в ответе
Pavluha,

Попробуйте еще вот это Кодирование MTOM
"Кодировщик MTOM может оптимизировать массивы байтов и потоки.В данном образце операция использует параметр Stream и, следовательно, может быть оптимизирована."

И вы сказали что передаете строки ? Может их конвертнуть в массив байтов - а потом через MTOM передавать ?
Вполне можно получить выгоду этак раз в 5-10 (по сравнению с оригинальными строками).
...
Рейтинг: 0 / 0
12.11.2015, 17:17
    #39102100
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой объем данных в ответе
Convert.FromBase64String
Convert.ToBase64String
...
Рейтинг: 0 / 0
12.11.2015, 17:22
    #39102109
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой объем данных в ответе
System.Text.Encoding.Unicode.GetBytes(str)
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Большой объем данных в ответе / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]