Клиент WCF Rest и Chunked Transfer Encoding: поддерживается ли это? - PullRequest
1 голос
/ 11 ноября 2009

У меня есть контракт данных, как определено ниже:

[DataContract(Namespace="",Name="community")]
public class Community {

    [DataMember(Name="id")]
    public int Id{get; set;}

    [DataMember(Name="name")]
    public string Name { get; set; }

    [DataMember(Name="description")]
    public string Description { get; set; }
}

и контракт на обслуживание выглядит следующим образом:

[OperationContract]
   [WebGet(
                BodyStyle = WebMessageBodyStyle.Bare,
                ResponseFormat = WebMessageFormat.Xml, 
                UriTemplate = "{id}"
 )]
   Community GetCommunity(string id);

Когда я делаю вызов покоя хосту, я получаю данные, но заполняются только свойства Id и Name. Свойство Description имеет значение null! Я создаю канал путем наследования от ClientBase.

Кто-нибудь знает, почему WCF сериализует Id и Name, но не Description? В ответе от хоста для Transfer Encoding установлено значение «Chunked», и я хотел бы знать, имеет ли это какое-либо отношение к нему?

1 Ответ

2 голосов
/ 12 ноября 2009

Я обнаружил, что некоторые свойства не сериализуются, потому что ответный xml содержит элементы в другом порядке. Решение состояло в том, чтобы явно установить порядок сериализации в датаконтракте. Вот данные, полученные после добавления атрибута заказа:

 [DataContract(Namespace="",Name="community")]
public class Community 
{
    [DataMember(Name = "name",Order=2)]
    public string Name { get; set; }

    [DataMember(Name="id",Order = 1)]
    public int Id{get; set;}

    [DataMember(Name="description",Order=3)]
    public string Description { get; set; }
}
...