Схема, сгенерированная из веб-сервиса WCF и ASMX, отличается - PullRequest
1 голос
/ 07 апреля 2010

У меня есть следующий класс

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

   public string Another { get; set; }  
}

Я использовал этот класс и в веб-службе WCF (SVC), и в веб-службе ASMX, и я ожидаю получить тело SOAP, совместимое как для ASMX, так и для SVC, где свойство «Prop» является атрибутом. Кроме того, я попытался добавить сервис и веб-ссылку на SVC и ASMX, и вот как выглядели XSD:

  1. Сервисная ссылка на SVC: не создан атрибут XmlAttribute для свойства Test.Prop
  2. Сервисная ссылка на ASMX: создан атрибут XmlAttribute для свойства Test.Prop
  3. Веб-ссылка на SVC: создано свойство XmlElement for Test.Prop
  4. Веб-ссылка на ASMX: создан атрибут XmlAttribute для свойства Test.Prop

Мой вопрос: почему сгенерированные XSD и, следовательно, SOAP XML не состоят? Я знаю, что это не имеет значения, так как оба метода работали независимо от созданной схемы.

1 Ответ

2 голосов
/ 07 апреля 2010

WCF по умолчанию использует сериализатор DataContract, который отличается от XmlSerializer, который использует ASMX. Следовательно, сгенерированный XSD также будет отличаться - сериализатор DataCOntract, например не поддерживает атрибуты XML (по соображениям скорости).

Ознакомьтесь с превосходным постом Дэна Ригсби, в котором сравниваются два сериализатора , и статьей MSDN Magazine Аарона Сконнарда Сериализация в WCF для получения более подробной информации.

...