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

问题描述:

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

[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服务使用这个类下面的类,我期望得到一个与ASMX和SVC一致的SOAP体,其中“Prop”属性是一个属性。另外,我尝试添加服务和网络,参照上述两个SVC和ASMX和这里的的XSD如何看起来像:

  1. 服务参考SVC:没有为Test.Prop财产
  2. 服务引用创建XmlAttribute属性ASMX:对于Test.Prop财产
  3. Web引用创建XmlAttribute属性SVC:创建的XmlElement为Test.Prop财产
  4. Web引用到ASMX:创建XmlAttribute属性为Test.Prop财产

我的问题是为什么生成的XSD和SOAP XML不包含?我知道这并不重要,因为无论生成的模式如何,两种方法都可以工作。

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

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