powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF. Эффективнее передать DataSet
25 сообщений из 45, страница 1 из 2
WCF. Эффективнее передать DataSet
    #36895775
Hug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hug
Гость
Добрый день, коллеги.
Столкнулся с необходимостью передавать эффективно данные с сервиса на клиент.
Сейчас передает сериализованный в xml datatable.
Естественно большой overhead.
Необходимо как-то плавно переплыть к бинарной кодировке сообщений и эффективному контейнеру передачи (List<T>).
DTO нет. Есть тока xml дататейблов. Можно ли как - то конвертить тейблы к спискам,
или клиент не сможет все это дело десериализовать? А может linq в помощь?

Вообщем, не обладаю большим опытом в этом, прошу совета как бы эффективнее бы послать тейбл через wcf.

PS На клиенте все операции опять идут с DataTable.
PSS: Http,Tcp биндинги
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36896434
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hug,

давай выложи объем оверхеда в килобайтах, и прикинем, есть ли ,что с меньшим оверхедом.
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36896465
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hug
Таскать таблицы - не кошерно. Безусловно надо переходить к коллекциям. DTO можно и написать.
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36898335
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переходить на коллекции надо естественно и сервером и клиентом одновременно.
Нельзя передать коллекции, а принять таблицы ;)

По поводу бинарной кодировки - тоже верное направление.

Вот некоторый промежуточный вариант - использование массива object, вместо datatable. Велосипед конечно.
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36900838
Hug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hug
Гость
Переходить не имею возможности (Куча legacy кода с DataTable)

Объем оверхеда = разница между xml с кучой полей и binary.

Покурю Ваш велосипед. На запас оставлю gzip=>byte[]=>mtom


Всем спасибо большое за участие. Отпостюсь о результатах.

Считаю тема очень актуальная.
Многие скоро начнут свое старое asmx(времен 1.0, без генериков, с датасетами) переводить на wcf.
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36900864
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HugМногие скоро начнут свое старое asmx(времен 1.0, без генериков, с датасетами) переводить на wcf.

уже начали... точнее - ПОНАЧИНАЛИ и забили : )
ибо, озадачились простым вопросом - а оно зачем надо (менять)?
уже 5 лет работает и, если не трогать , ещё не один раз по 5 лет проработает

мудрые говорят: лучшее - враг хорошего
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36900930
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шайтан, +1

P.S. Зачем ломать то, что прекрасно работает. Новые проекты, да - на WCF, тут всё правильно.
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36911635
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут посмотри
я использую

тесты RsdnDetaSerializer
Serialization: 150 ms Loading: 450 Length: 1 053 824 bytes
Serialization: 140 ms Loading: 451 Length: 1 053 824 bytes
Serialization: 140 ms Loading: 451 Length: 1 053 824 bytes

BinaryFormatter
Serialization: 2 123 ms Loading: 7 631 Length: 6 985 259 bytes
Serialization: 1 773 ms Loading: 7 701 Length: 6 985 259 bytes
Serialization: 1 773 ms Loading: 7 701 Length: 6 985 259 bytes

XmlSerializer
Serialization: 1 793 ms Loading: 7 591 Length: 9 309 050 bytes
Serialization: 1 652 ms Loading: 7 561 Length: 9 309 050 bytes
Serialization: 1 662 ms Loading: 7 561 Length: 9 309 050 bytes

SoapFormatter
Serialization: 2 594 ms Loading: 9 233 Length: 11 001 874 bytes
Serialization: 2 573 ms Loading: 9 173 Length: 11 001 874 bytes
Serialization: 2 554 ms Loading: 9 163 Length: 11 001 874 bytes
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36911714
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas,

что еще хотелось бы узнать,это какой процессор и сколько памяти использовали для теста.
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36911792
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hug, 12 окт 10, 20:21 [9596316]

Посмотри здесь , в конце статьи приведены и цифры и вывод.

С уважением, Владимир.
p.s. DateSet сериализуем.
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36911832
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKbarrabas,

что еще хотелось бы узнать,это какой процессор и сколько памяти использовали для теста.
эти тесты автора, свои я не помню (сейчас дома, а не на работе), там же есть исходник просто запусти в новом проекте, на своей машине.
у себя еще gzip использую
причем судя по форуму уже 2я версия, а я давно уже юзаю (подпиливал под себя) возможно и первую версию, по сути можно выкинуть версии строк, мне они не нужны
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36911844
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasAlexeiKbarrabas,

что еще хотелось бы узнать,это какой процессор и сколько памяти использовали для теста.
эти тесты автора, свои я не помню (сейчас дома, а не на работе), там же есть исходник просто запусти в новом проекте, на своей машине.
у себя еще gzip использую
причем судя по форуму уже 2я версия, а я давно уже юзаю (подпиливал под себя) возможно и первую версию, по сути можно выкинуть версии строк, мне они не нужны
хотя нет, там 2003год, значит эта версия, я не так давно этим озадачился
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36923156
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas тут посмотри
я использую


Хм. Это для того чтобы потом подсунуть сериализованные данные в виде DataTable - например в ObjectDataSource - надо еще свою обертку написать, которая будет десериализовать?
Или можно как-то по другому извернуться?
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36923344
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hstasbarrabas тут посмотри
я использую


Хм. Это для того чтобы потом подсунуть сериализованные данные в виде DataTable - например в ObjectDataSource - надо еще свою обертку написать, которая будет десериализовать?
Или можно как-то по другому извернуться?
так там сериализатор и десиализатор
сериализуешь в byte[], зипуешь если нужно, передаешь кленту, а на клиенте десериализуешь в DS или DataTable зачем обертку?
это класс для компактной записи инфы из датасета, как я понял тупо без всяких лишних тегов пишет в определённо порядке инфу через разделитель, и читает обратно в датасет
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36923466
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas
так там сериализатор и десиализатор
сериализуешь в byte[], зипуешь если нужно, передаешь кленту, а на клиенте десериализуешь в DS или DataTable зачем обертку?
это класс для компактной записи инфы из датасета, как я понял тупо без всяких лишних тегов пишет в определённо порядке инфу через разделитель, и читает обратно в датасет

Это я все вижу. Просто получается, метод WCF сервиса, будет возвращать не DataTabel или DataSet, а сериализованный контент.
А такой метод нельзя указазать для ObjectDataSource. Надо будет писать врапер, который будет дергать функции WCF сервиса, и полученное десериализовать в DataTable.


Сейчас у меня декларативно указано

Код: plaintext
1.
2.
3.
4.
	<asp:ObjectDataSource ID="odsOrders" runat="server" SelectMethod="GetOrdersMmts" TypeName="LcrServiceReference.LcrWebService"
		EnableCaching="true" CacheDuration="300"
		onobjectcreating="OdsCreating"></asp:ObjectDataSource>


Где GetOrdersMmts - это метод WCF сервиса (LcrServiceReference.LcrWebService), возвращает DataTable.
Если он начнет возвращать сериализованный вручную контейнер - без доп обертки не обойтись.

Не?
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36923779
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да, конечно нужно будет создать метод в котором вызовет метод сервиса и результат десериализует в таблицу.
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36923800
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чего то я не понял, как GetOrdersMmts у вас возвращает DataTable?
Почему у меня не получилось создать OperationContract возвращающий произвольную таблицу.

у вас там прям

[OperationContract]
DataTable GetOrdersMmts();
??
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36924169
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasчего то я не понял, как GetOrdersMmts у вас возвращает DataTable?
Почему у меня не получилось создать OperationContract возвращающий произвольную таблицу.

у вас там прям

[OperationContract]
DataTable GetOrdersMmts();
??

ну да
Код: plaintext
1.
[OperationContract]
public DataTable GetOrdersMmts();
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36924549
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hstasbarrabasчего то я не понял, как GetOrdersMmts у вас возвращает DataTable?
Почему у меня не получилось создать OperationContract возвращающий произвольную таблицу.

у вас там прям

[OperationContract]
DataTable GetOrdersMmts();
??

ну да
Код: plaintext
1.
[OperationContract]
public DataTable GetOrdersMmts();

а понял нужно имя давать DataTable иначе ошибка (оказывается известная фишка)
но rsdn метод эффективнее передает большие объемы, т.ч. на нем оставлю
да и я не вызываю проксю напрямую, у меня класс обертка для нее есть, т.к. в проксе только один метод в которую передаю имя действия параметры для него, а уж параметры и результат зависит от имени метода
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36924851
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>barrabas, 27.10.2010, 17:54 [9687314]
>ну да, конечно нужно будет ...

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

С уважением,
Владимир
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36924905
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>barrabas, 27.10.2010, 17:54 [9687314]
>ну да, конечно нужно будет ...

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

С уважением,
Владимир
ну тогда и передавать можно было коллекцию объектов, просто зачастую нужно передать компиляцию из многих объектов для простого отображения (ну отчёт например, пара полей из обного объекта, пара из другого, какието вычисления по третьему), передавать объекты целиком на клиента и там их обрабатывать не всегда эффективнее, чаще лучше написать селект в БД и передать результат, как произвольный дататайбл, для отчёта
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36924908
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasВМоисеев>barrabas, 27.10.2010, 17:54 [9687314]
>ну да, конечно нужно будет ...

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

С уважением,
Владимир
ну тогда и передавать можно было коллекцию объектов, просто зачастую нужно передать компиляцию из многих объектов для простого отображения (ну отчёт например, пара полей из обного объекта, пара из другого, какието вычисления по третьему), передавать объекты целиком на клиента и там их обрабатывать не всегда эффективнее, чаще лучше написать селект в БД и передать результат, как произвольный дататайбл, для отчёта
а плодить объекты типа Запись для отчёта 1 как то глупо ихмо
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36924980
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потестил я этот сериализатор. большого выигрыша если честно, я не заметил.
Но с помощью тестов, я нашел одну нехорошую у меня в сервисе вещь.
Сейчас еще разок проверю, отпишусь.
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36925049
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hstasпотестил я этот сериализатор. большого выигрыша если честно, я не заметил.
Но с помощью тестов, я нашел одну нехорошую у меня в сервисе вещь.
Сейчас еще разок проверю, отпишусь.
gzip прикрутил?
...
Рейтинг: 0 / 0
WCF. Эффективнее передать DataSet
    #36925379
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabashstasпотестил я этот сериализатор. большого выигрыша если честно, я не заметил.
Но с помощью тестов, я нашел одну нехорошую у меня в сервисе вещь.
Сейчас еще разок проверю, отпишусь.
gzip прикрутил?


Неа. Как прикручивать?
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF. Эффективнее передать DataSet
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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