Список клиентов WCF <> - PullRequest
       1

Список клиентов WCF <>

3 голосов
/ 11 января 2011

Я получил службу WCF с методом (GetUserSoftware) для отправки списка клиенту.

программное обеспечение, которое я определил следующим образом:

[DataContract]
public class Software
{
    public string SoftwareID { get; set; }
    public string SoftwareName { get; set; }
    public string DownloadPath { get; set; }
    public int PackageID { get; set; }

}

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

Проблема в том, что на стороне клиента список превращается в массив.и каждый элемент в этом массиве не содержит ни одного из моих атрибутов программного обеспечения.

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

Кто-нибудь знает, как обойти это или знает, что я могу сделать?

Ответы [ 5 ]

4 голосов
/ 11 января 2011

Когда вы используете атрибут DataContract для типа, вы должны использовать атрибут DataMember для каждого свойства или поля, которое вы хотите сериализовать и передавать между службой и клиентом.Коллекции по умолчанию создаются как массивы.Если вам это не нравится, вы можете изменить это поведение в окне Add Service Reference -> Advanced settings, где вы можете выбрать, какой тип коллекции следует использовать.

4 голосов
/ 11 января 2011

Вы забыли атрибут [DataMemeber] в своих свойствах?

1 голос
/ 11 января 2011

Во-первых, каждое из свойств, которые вы хотите сериализовать, должно иметь атрибут [DataMember]:

[DataContract]
public class Software
{
    [DataMember]
    public string SoftwareID { get; set; }
    [DataMember]
    public string SoftwareName { get; set; }
    [DataMember]
    public string DownloadPath { get; set; }
    [DataMember]
    public int PackageID { get; set; }    
}

Во-вторых, перевод в массив будет обрабатываться клиентом, а не сервером.

0 голосов
/ 23 мая 2012

Я страдал с той же проблемой, и теперь я решил ее!Это была проблема ServiceKnownType.Если у вас есть загрузчик с известным типом, мы должны добавить тип времени выполнения, например:

Type aaa =  Type.GetType("System.Collections.Generic.List`1[[ProjectName.BusinessObjects.Bank, ProjectName.BusinessObjects, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null]]");

knownTypes.Add(aaa);

Любой, имеющий такую ​​же проблему, может попробовать это.Это работает в моей среде!

0 голосов
/ 11 января 2011

Вы можете сохранить список вместо массива на клиенте при добавлении справочника услуг: нажмите кнопку «Дополнительно» и измените тип коллекции на тот, который вам нужен.

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