В SOA я считаю, что wsdl не поддерживает рекурсивные типы данных, но я видел несколько примеров, где прокси действительно работает. Кто-нибудь знает больше об этом?
Может ли контракт данных WCF быть рекурсивным? Например бинарное дерево? Есть ли разница со службами ASMX в поддержке рекурсивных структур данных?
Ответы (2)
Разрешены рекурсивные определения типов, и даже циклические графы объектов разрешены и сериализуемы. Однако, чтобы избежать нехватки места в стеке при сериализации и десериализации, вам потребуется создать пользовательское поведение, переопределяющее метод CreateSerializer и задающее для параметра saveObjectReferences значение true при создании DataContractSerializer. Дополнительные сведения см. в блоге Джеймса Ковача.
person
Travis Heseman
schedule
18.09.2009
Спасибо, Трэвис, это ответ, который я искал. Действительно очень хороший блог
- 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
Допустим, у вас есть что-то вроде этого: [DataContract] public class Tree{ [DataMember] public Tree Left{ get;set; } [DataMember] public Tree Right{ get;set; [DataMember] общедоступные строковые данные {get;set; } } }
- person ; 18.09.2009
в SOA, разве не поддерживаются рекурсивные типы данных?
- person ; 18.09.2009
@Neo: я никогда не слышал этого. Если найдёшь цитату, выложи.
- person John Saunders; 18.09.2009