Может ли контракт данных WCF быть рекурсивным? Например бинарное дерево? Есть ли разница со службами ASMX в поддержке рекурсивных структур данных?

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


person Community    schedule 18.09.2009    source источник


Ответы (2)


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

person Travis Heseman    schedule 18.09.2009
comment
Спасибо, Трэвис, это ответ, который я искал. Действительно очень хороший блог - person ; 18.09.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>
person John Saunders    schedule 18.09.2009
comment
Допустим, у вас есть что-то вроде этого: [DataContract] public class Tree{ [DataMember] public Tree Left{ get;set; } [DataMember] public Tree Right{ get;set; [DataMember] общедоступные строковые данные {get;set; } } } - person ; 18.09.2009
comment
в SOA, разве не поддерживаются рекурсивные типы данных? - person ; 18.09.2009
comment
@Neo: я никогда не слышал этого. Если найдёшь цитату, выложи. - person John Saunders; 18.09.2009