2010-04-07 51 views
1

從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不包含?我知道這並不重要,因爲無論生成的模式如何,兩種方法都可以工作。

回答

2

WCF默認使用DataContract序列化程序,它與ASMX使用的XmlSerializer不同。因此,生成的XSD也會有所不同 - 例如DataCOntract序列化程序。不支持XML屬性(出於速度原因)。

查看Dan Rigsby出色的blog post comparing the two serializers和Aaron Skonnard的MSDN雜誌文章Serialization in WCF瞭解更多詳情。