Словарь WCF, реализующий IXmlSerializable - PullRequest
0 голосов
/ 22 марта 2012

У меня есть несколько служб WCF, в которых используется DataContractSerialization по умолчанию. Некоторые из сервисных методов возвращают объекты Dictionary. Один из клиентов генерирует XSD-файлы из служб WCF (связанных с biztalk), и он просит преобразовать все типы словарей в новый тип словаря, который реализует IXmlSerializable. Интересно, будут ли какие-либо неожиданные результаты этого преобразования, которые могут как-то повлиять на сериализацию DataContract?

Обновление: Сервер и клиент совместно используют одни и те же доменные библиотеки, клиенты не генерируют их из службы. Может быть, в этом вопросе мне не хватало основного момента; Интересно, нужно ли сериализовать объект с помощью сериализации контракта данных, реализация IXmlSerializable в объекте вызовет какие-либо проблемы.

Ответы [ 3 ]

0 голосов
/ 22 марта 2012

Скажите клиенту, чтобы он использовал следующий сериализуемый словарь, когда ему нужно сериализовать результат словаря из вызова службы: C # Serializable Dictionary - рабочий пример

Он принимает обычный словарь в качестве аргумента конструктора и, таким образом, преобразует любой словарь в сериализуемый. Вы также можете вернуть SerializableDictionary type в качестве результата служебного вызова, если хотите.

0 голосов
/ 07 июля 2012

Возникла непредвиденная проблема;поскольку доменные объекты уже реализуют сериализацию контракта данных, невозможно реализовать IXmlSerializable без изменения всего механизма сериализации.

0 голосов
/ 22 марта 2012

Ваш клиент делится dll с сервисом?

Если он не делится библиотеками (dll) со службой, то внесение изменений в конце службы не будет иметь никакого значения. Ваш WCF возвращает данные, а не классы. Эти данные восстанавливаются в классы, которые создаются клиентом на основе определений в WSDL, возвращаемых вашей службой. Вы не можете управлять этими сгенерированными библиотеками (делая изменения на сервере), если вы не разделяете библиотеки между клиентом и сервером.

Если он хочет обернуть сгенерированные словари в словарь IXmlSerializable, тогда он может, или если он хочет сгенерировать словарь другого типа, то он, вероятно, может сделать это также, но я не думаю, что есть что-то, что вы можете делать на стороне сервера.

...