从WCF Web服务和ASMX生成的模式是不同的

时间:2010-04-07 13:13:52

标签: xml wcf web-services xsd schema

我有以下课程

[Serializable()]  
[XmlType(AnonymousType=true)][XmlRoot(Namespace="", IsNullable=false)]  
public class Test  
{  
   [XmlAttribute()]  
   public string Prop { get; set; }  

   public string Another { get; set; }  
}

我在WCF Web服务(SVC)和ASMX Web服务中都使用了这个类,我希望得到一个SOAP主体,它对于ASMX和SVC都是一致的,其中“Prop”属性是一个属性。此外,我尝试向SVC和ASMX添加服务和Web引用,这里是XSD的样子:

  1. 对SVC的服务引用:未为Test.Prop属性创建XmlAttribute属性
  2. 对ASMX的服务引用:为Test.Prop属性创建了XmlAttribute属性
  3. Web参考SVC:为Test.Prop属性创建XmlElement
  4. Web参考ASMX:为Test.Prop属性创建XmlAttribute属性
  5. 我的问题是为什么生成的XSD和SOAP XML不构成?我知道这无关紧要,因为无论生成的架构如何,这两种方法都有效。

1 个答案:

答案 0 :(得分:2)

默认情况下,WCF使用DataContract序列化程序,这与ASMX使用的XmlSerializer不同。因此,生成的XSD也会有所不同 - 例如DataCOntract序列化器不支持XML属性(出于速度原因)。

查看Dan Rigsby的优秀blog post comparing the two serializers和Aaron Skonnard的MSDN杂志文章Serialization in WCF了解更多详情。