Может ли контракт данных WCF быть рекурсивным? Например бинарное дерево? Есть ли разница со службами ASMX в поддержке рекурсивных структур данных? - PullRequest
1 голос
/ 18 сентября 2009

В SOA я считаю, что wsdl не поддерживает рекурсивные типы данных, но я видел несколько примеров, когда прокси действительно работает. Кто-нибудь знает больше об этом?

Ответы [ 2 ]

2 голосов
/ 18 сентября 2009

Рекурсивные определения типов разрешены, и даже циклические графы объектов разрешены и сериализуемы. Однако, чтобы не допустить исчерпания пространства стека при сериализации и десериализации, вам необходимо создать пользовательское поведение, переопределяющее метод CreateSerializer и устанавливающее для параметра preserveObjectReferences значение true при создании DataContractSerializer. См. блог Джеймса Ковача для получения дополнительной информации.

0 голосов
/ 18 сентября 2009

Пожалуйста, определите, что вы подразумеваете под рекурсией. Ниже приведена действительная схема XML для использования в WSDL:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
     elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="Node" type="NodeType"/>
    <xs:complexType name="NodeType">
        <xs:sequence>
            <xs:element name="Node" type="NodeType"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
...