Как мы можем прозрачно сериализовать расширенные свойства набора данных в WCF? - PullRequest
3 голосов
/ 14 мая 2009

Мы переходим с Remoting на WCF - очень большое приложение, которое интенсивно использует DataSets. Мы используем ExtendedProperties таблиц DataSets для хранения графа объектов, содержащих специальную информацию, которая нам нужна на стороне клиента.

В нашей реализации Remoting мы добавили в стек каналов каналы клиента и сервера, чтобы проверить, содержит ли сообщение набор данных, и использовали сериализатор xml, чтобы иметь возможность отправлять ExtendedProperties по сети (возможно, вы знаете, что сериализатор набора данных) выполняет ToString () элементов, найденных в ExtendedProperties).

Мы сделали это таким образом, чтобы это было прозрачно для бизнес-правил и разработчиков пользовательского интерфейса.

Что мы должны переопределить или реализовать в WCF, чтобы иметь возможность управлять DataSet до его сериализации в xml / soap по каналу wcf? Возможно ли это?

Примечание: Я уже знаю, что мы должны избегать использования наборов данных в wcf, но у нас более 200 форм, использующих наборы данных, и изменение их всех сейчас не вариант.

Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 15 июня 2009

Интересно, если вы не можете поменять местами сериализатор, добавив атрибут поведения на каждом конце ... учитывая XmlReader / XmlWriter, подход:

dataset.WriteXml(xmlWriter, XmlWriteMode.WriteSchema);

и

dataset.ReadXml(xmlReader, XmlReadMode.ReadSchema);

, кажется, работает (т. Е. Расширенные свойства соблюдаются), поэтому вы должны иметь возможность написать поведение, которое обнаруживает DataSet и переключается на пользовательский сериализатор - как это ( атрибут | поведение | сериализатор ) - но, вероятно, проще. Я могу взглянуть позже, если этого недостаточно, чтобы начать ...

1 голос
/ 22 июня 2009

Прежде всего, спасибо за ваши ответы. Наконец-то я нашел, как изменить сериализатор со смесью ответа Марка и записи в блоге Индиго Николаса Аллена .

Спасибо.

1 голос
/ 21 июня 2009

Возможно, вам стоит перейти на NetDataContractSerializer . Он способен сериализовать все сериализуемые типы .NET, включая даже те, которые поддерживают ISerializable, и полностью обрабатывает циклы в таких графах.

Но это будет работать, только если вы собираетесь использовать службу WCF клиентом .NET.

...