Вопрос

2 вопроса действительно, и я не уверен, если я делаю это правильно или нет ...

Я хочу отправить массив своего рода для созданного объекта объекта. Я не совсем уверен, как пометить его для отправки (какие атрибуты необходимы или что-то еще), и я не совсем уверен, как отправить его обратно (Ilist, список, коллекция, ychollcept).

В идеале я бы хотел, чтобы иметь возможность отправить обратно обслуживать технику, но это будет работать, если клиент, который хочет потреблять сервис, не в .NET?

[ServiceContract(Namespace = "http://www.tempuri.com/MyService",
                 ConfigurationName = "IMyService")]
public interface IMyServie
{
    [OperationContract(Action = "http://www.tempuri.com/MyService/GetUsers",
                       ReplyAction = "*")]
    [XmlSerializerFormat(SupportFaults = true)]
    GetUsersResponse GetUsers(GetUsersRequest request);
}

[MessageContract(IsWrapped = false)]
public sealed class GetUsersRequest
{
    public GetUsersRequest() { }
    public GetUsersRequest(Int32 record = -1)
    {
        Record = record;
    }

    [MessageBodyMember(Namespace = "", Order = 0)]
    public Int32 Record { get; private set; }

}

[MessageContract(IsWrapped = false)]
//[ServiceKnownType(??)]
public sealed class GetUsersResponse
{
    public GetUsersResponse() { }
    public GetUsersResponse(PersonEntity[] entities)
    {
        Entities = entities;
    }

    [MessageBodyMember(Namespace = "", Order = 1)]
    //[XmlElement(DataType = "??")]
    public PersonEntity[] Entities { get; private set; }
    //Should this have been some other type of array-type (Collection, List, etc?)
}

//Does this need any attributes besides Serializable?
[Serializable()]
public PersonEntity : AbstractEntity
{
    public PersonEntity() { }
    public PersonEntity(Int32 id = 0, String fname = "", String lname = "")
    {
        ID        = id;
        FirstName = fname;
        LastName  = lname;
    }

    public String FirstName { get; set; }
    public String LastName { get; set; }

    //Functionality (Clone, Clear, Default, Equals, etc) Removed...
}

[Serializable()]
public abstract class AbstractEntity : IEntity
{
    public Int32 ID { get; set; }

    //Abstracts or Implements some functionality...
}

public interface IEntity
{
    //Defines functionality requirements
}
Это было полезно?

Решение

DataconTract - это то, что вы ищете. Для более подробной информации о проверке этого связь

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

Другие советы

Когда дело доходит до прохождения объектов над проводом, вы должны подумать о данных, а не по поведению. Таким образом, насколько это касается, список или IENumerable или T [] не будут отличаться, и мое предпочтение будет массивом, который поддерживается на всех языках. Сервер не должен знать или не приносить никакого ненскообразного предположения о клиенте (WPF, Windows Forms, ...), и все, что вы проходите, - это набор данных, так как наименее предписывающие - это лучший: T [] (массив т).

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

Также вы используете MessageContract, не используя какие-либо преимущества тела / заголовка. Таким образом, вы должны использовать datacontract.

Наиболее взаимодействующие средства будут возвращать массив комплексного типа, что бы вы ни решили. Мои личные предпочтения состоит в том, чтобы использовать выделенный объект DTO для передачи через проволоку, а не разоблачить внутренние объекты непосредственно через службу.

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

Имейте в виду, что ObservableCollection не передаст изменения обратно на сервис; Вы собираетесь в H, чтобы сделать эти вручную.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top