有人可以指出(或在这里,如果可能的话)回答我的材料/参考,该材料/参考描述了如何在WCF操作中正确使用MessageContrac
t。我看过this文件。
我想知道:
1)使用MessageContract
作为操作合同的返回值时有哪些限制?
2)如果用MessageContract
装饰的类具有返回用XmlRoot
装饰的类的对象的属性,该怎么办?
3)如果MessageContract
将包含数组或集合,是否有任何限制或考虑因素?
答案 0 :(得分:3)
MessageContract
进行请求描述,您也必须将其用于响应,反之亦然。唯一的例外是返回void或不接受任何参数的操作。DataContractSerializer
,但您可以通过使用XmlSerializer
属性标记合同,服务或操作将其切换为XmlSerailazerFormat
。在这种情况下,序列化将忽略DataContract
/ DataMember
属性并开始使用常见的Xml序列化属性(包括XmlRoot
)。最重要的是MessageContract
与使用的序列化程序无关 - 它可以与DataContract
和Xml序列化一起使用。MessageContract
单独处理 - 每个元素都标有MessageBodyMember
属性。 答案 1 :(得分:1)
MessageContract属性启用/要求您指定操作的整个消息的格式,对序列化/反序列化消息的方式进行细粒度控制,而不是控制是否包含单个字段的DataContract / DataMember属性在序列化中。
处理可序列化类时,System.Xml.XmlSerializer类使用XmlRoot属性; WCF使用不使用此属性的DataContractSerializer。
此问题中的更多信息:Why does the XmlRoot attribute gets ignored in WCF and how to overcome this