#c# #.net #vb.net #wcf #serialization
#c# #.net #vb.net #wcf #сериализация
Вопрос:
На стороне сервера моего приложения у меня есть такая функция:
public function GetDS as MyTypedDS
Dim dsRetVal as new MyTypedDS
'Make fantastic things with the dataset
return dsRetVal
end function
На стороне клиента я вызываю эту функцию через сгенерированную «ссылку на службу»:
Dim ds as Reference1.MyTypedDS = myRefInst.GetDS
Как я могу отключить сериализацию схемы типизированного набора данных, чтобы уменьшить трафик?
Достаточно ли установить SchemaSerializationMode для ‘dsRetVal’ в значение ExcludeSchema, прежде чем возвращать его? Или эта опция игнорируется WCF?
Спасибо
Комментарии:
1. Со всей серьезностью — вы
DataSet
действительно ужасная вещь для отправки через WCF (практически все остальное предпочтительнее). Обычные типизированные объекты были бы гораздо предпочтительнее. Если цель состоит в том, чтобы уменьшить пропускную способность, доступны альтернативные сериализаторы, но они не очень полезны дляDataSet
.2. Добавлен предлагающий ответ
DataSet.RemotingFormat
, но только что протестировал это сDataContractSerializer
помощью, и он не используется — так что не беспокойтесь об этом.3. Старики в моем магазине (магазин финансовых товаров) решили написать собственное хранилище данных только по тем причинам, что DataSet через «.Net remoting» был настоящей улиткой. этот материал для хранения данных по-прежнему работает как шарм в WCF, когда я перенес все наши удаленные материалы .net в WCF
4. @Marc Gravell: К сожалению, в ближайшем будущем изменить тип данных невозможно. (Замена наборов данных)
Ответ №1:
Вы пробовали установить RemotingFormat для набора данных в SerializationFormat.Двоичный файл? Мы широко используем это при удаленном использовании наборов данных .Net (которые, конечно, мы используем только при крайней необходимости), и это значительно повышает производительность.
Несколько других вариантов:
1) Двоичная сериализация набора данных и просто передача ByteArray
2) Сериализуйте набор данных в строковый формат (т.Е. JSON), затем заархивируйте полученную строку и передайте архивированные данные.