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

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

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

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

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

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

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

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

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

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

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

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


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

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

Почитал тут про сжатие. Есть какой-нибудь способ ужать ответ например так, чтобы он стал не 200, а намного меньше?
...
Рейтинг: 0 / 0
Большой объем данных в ответе
    #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
Большой объем данных в ответе
    #39102096
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavluha,

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

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


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