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

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

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

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

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

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

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

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


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

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

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

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

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

тесты 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
21.10.2010, 12:17
    #36911714
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Эффективнее передать DataSet
barrabas,

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

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

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

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

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


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


Хм. Это для того чтобы потом подсунуть сериализованные данные в виде DataTable - например в ObjectDataSource - надо еще свою обертку написать, которая будет десериализовать?
Или можно как-то по другому извернуться?
так там сериализатор и десиализатор
сериализуешь в byte[], зипуешь если нужно, передаешь кленту, а на клиенте десериализуешь в DS или DataTable зачем обертку?
это класс для компактной записи инфы из датасета, как я понял тупо без всяких лишних тегов пишет в определённо порядке инфу через разделитель, и читает обратно в датасет
...
Рейтинг: 0 / 0
27.10.2010, 16:53
    #36923466
hstas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Эффективнее передать DataSet
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
27.10.2010, 17:54
    #36923779
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Эффективнее передать DataSet
ну да, конечно нужно будет создать метод в котором вызовет метод сервиса и результат десериализует в таблицу.
...
Рейтинг: 0 / 0
27.10.2010, 18:00
    #36923800
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF. Эффективнее передать DataSet
чего то я не понял, как GetOrdersMmts у вас возвращает DataTable?
Почему у меня не получилось создать OperationContract возвращающий произвольную таблицу.

у вас там прям

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

у вас там прям

[OperationContract]
DataTable GetOrdersMmts();
??

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

у вас там прям

[OperationContract]
DataTable GetOrdersMmts();
??

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

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

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

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

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

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

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

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


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


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