有人能给我指出(如果可能的话,在这里回答)描述如何在WCF操作中正确使用MessageContract的材料/参考资料吗?我已经读过this文档了。
我想知道: 1)使用MessageContract作为操作契约的返回值有什么限制? 2)如果用MessageContract修饰的类有一个返回用XmlRoot修饰的类的对象的属性怎么办? 3)如果MessageContract要包含数组或集合,有什么限制或考虑因素吗?
发布于 2011-06-09 19:58:19
MessageContract进行请求描述,您就必须将其用于响应,反之亦然。唯一的例外是默认情况下返回parameters.DataContractSerializer的操作使用XmlSerializer,但您可以通过使用XmlSerailazerFormat属性标记契约、服务或操作来将其切换为XmlSerailazerFormat。在这种情况下,序列化将忽略DataContract / DataMember属性,并开始使用通用的Xml序列化属性(包括XmlRoot)。最重要的是,MessageContract与使用的序列化程序无关-它既可以与DataContract一起使用,也可以与Xml一起使用。serialization.MessageContract分别处理-每个元素都标有MessageBodyMember属性。发布于 2011-06-09 19:42:54
MessageContract属性允许/要求您为操作指定整个消息的格式,并对如何序列化/反序列化消息进行细粒度控制,而不是控制序列化中是否包含单个字段的DataContract/DataMember属性。
XmlRoot属性由System.Xml.XmlSerializer类在处理可序列化类时使用;WCF使用不使用此属性的DataContractSerializer。
此问题中有更多信息:Why does the XmlRoot attribute gets ignored in WCF and how to overcome this
https://stackoverflow.com/questions/6292147
复制相似问题