Использование свойства ICollection со службой WCF - PullRequest
1 голос
/ 10 октября 2010

У меня есть класс, ExpenseInfo, который включает в себя свойство ICollection<String>:

public ICollection<String> WhoOwes { get; private set; }

У меня есть служба WCF, которая возвращает объекты типа ExpenseInfo. Я добавил ссылку на сервис в проекте Silverlight в том же решении. Это сгенерировало кучу кода, включая класс ExpenseInfo в Reference.cs в проекте Silverlight.

Этот класс выглядит довольно хорошо (хотя, если я хочу добавить аннотации данных проверки RIA, как я могу это сделать?), Но в нем отсутствует свойство WhoOwes. Есть ли какая-то причина, по которой он не может быть отправлен по проводам? Нужно ли представлять эти данные по-другому? Или я испортил некоторые настройки?

Ответы [ 3 ]

2 голосов
/ 10 октября 2010

См. WCF WebGet и ICollection <>

Добавить

[ServiceKnownType(typeof(string[]))]

атрибут вашего класса (не вашего метода) и свойство WhoOwes будут отправлены в виде строки [].

1 голос
/ 10 октября 2010

Семантика свойств AFAIK C # не представлена ​​в метаданных, описывающих веб-сервис.

Эти метаданные находятся в разных файлах схем XML (с расширением ".xsd"), созданных WCF. То же самое относится и к атрибутам RIA, которые вы можете добавить к своим типам данных.

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

1 голос
/ 10 октября 2010

Похоже, что private set была проблемой.Я удалил его, и теперь поле отображается.

Есть ли способ указать, что коллекция не может быть установлена, и все еще использовать ее здесь?

...