WCF: тело вывода SOAP содержит имена тегов вместо элементов - PullRequest
1 голос
/ 18 декабря 2009

У меня есть объект, созданный с помощью инструмента xsd.exe, который определяет атрибуты xml в коде, но ответ SOAP от моего веб-сервиса возвращает xmlelements вместо атрибутов.

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Accountinfo {

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string UpdatedDate;

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string UpdatedBy;

... etc

Как видите, UpdateDate и т. Д. Определяются как атрибуты. Когда я вызываю свой сервис, мыло, которое я получаю, возвращает элемент Accountinfo следующим образом:

<a:Accountinfo> <a:UpdatedBy>IGD</a:UpdatedBy> <a:UpdatedDate>12/18/2009 9:43:06 AM</a:UpdatedDate> ... и т. д.

То, что я ищу, это <AccountInfo UpdatedBy="IGD" UpdatedDate="12/18/2009 9:43:06 AM" ... />

У меня нет большого опыта работы с XML, SOAP или WCF, но сейчас я использую все три, и мне нужно, чтобы это работало. Что мне здесь не хватает?

1 Ответ

2 голосов
/ 19 декабря 2009

Использует ли ваш веб-сервис WCF SOAP стандарт WCF DataContractSerializer? Если так - это ожидаемое поведение.

Ради скорости примерно на 10% DataContractSerializer (который используется по умолчанию в WCF, если вы явно не запрашиваете XmlSerializer) отказывается от атрибутов XML и сериализует все как элементы.

Даже наличие всех этих атрибутов [XmlAttribute] в ваших данных не имеет значения - вам нужно специально запрашивать XmlSerializer, либо при создании прокси-клиента (с использованием svcutil.exe, либо в Visual Studio «Добавить ссылку на службу») диалог), либо указав атрибут [XmlSerializerFormat] в реализации вашей службы.

Узнайте больше об атрибуте XmlSerializerFormat и посмотрите отличное сравнение Дана Ригсби WCF DataContractSerializer с XmlSerializer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...