@bagos

Можно ли передать Ilist или другую коллекцию через WCF?

Здравствуйте, как можно передать IList через wcf службу?
Ilist - коллекция объектов класса MyClass
  • Вопрос задан
  • 2886 просмотров
Решения вопроса 1
RaTT
@RaTT
Ведущий .NET разработчик & системный архитектор
А что вам мешает? Примерно вот так будет выглядеть контракт:
[ServiceContract]
public interface IService
{
  [OperationContract]
  List<MyClass> GetMyClassList();
}

Ну и класс MyClass, а также его свойства должны быть соответствующим образом размечены атрибутами:
[DataContract]
public class MyClass
{
  [DataMember]
  public int Id { get; set; }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@bagos Автор вопроса
Все так и сделано, list передается, но каждый раз приходится править reference на клиенте. Структура такая:
    [DataContract]
    public abstract class A
    {
        [DataMember]
        public int Id{get;set}
        [DataMember]
        public string Name{get;set;}

        protected A(int id,string name )
        {
            Id = id;
            Name = name;
        }

        public abstract Set(...);
        public abstract Get(...);
    }

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

Класс от которого наследуют другие также имеет атрибуты [KnownType(typeof(AnotherClass))] для дочерних классов. И все работает, но вот остается вопросом почему си автоматом при создании servicereference для клиента не создает в коде конструкторы для классов и также просит добавить методы абстрактные, хотя в клиенте они не используются и не должны. Даже если они обязаны там быть, какой еще атрибут надо добавить в класс A для методов чтобы они автоматом добавлялись в reference?

Через WCF передается List<A> который содержит все классы наследуемые от А
Спасибо
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы