Как игнорировать схему набора данных в соединении WCF

#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), затем заархивируйте полученную строку и передайте архивированные данные.