Поделиться через


Ссылки на объекты

В примере ObjectReferences показано, как передавать объекты по ссылкам между сервером и клиентом. В примере используются имитированные социальные сети. Социальная сеть состоит из Person класса, содержащего список друзей, в которых каждый друг является экземпляром Person класса, с собственным списком друзей. При этом создается граф объектов. Служба обеспечивает доступ к операциям на этих социальных сетях.

В этом примере служба размещена с помощью Internet Information Services (IIS), и клиент является "консольным приложением" (.exe).

Замечание

Процедура установки и инструкции по сборке для этого примера находятся в конце этого раздела.

Услуга

Классу Person применяется атрибут DataContractAttribute, при этом поле IsReference устанавливается в true, чтобы объявить его как ссылочный тип. Все свойства применяют DataMemberAttribute атрибут.

[DataContract(IsReference=true)]
public class Person
{
    string name;
    string location;
    string gender;
    int age;
    List<Person> friends;
    [DataMember()]
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    [DataMember()]
    public string Location
    {
        get { return location; }
        set { location = value; }
    }
    [DataMember()]
    public string Gender
    {
        get { return gender; }
        set { gender = value; }
    }
…
}

Операция GetPeopleInNetwork принимает параметр типа Person и возвращает всех людей в сети; то есть все люди в friends списке, друзья друга и т. д. без дубликатов.

public List<Person> GetPeopleInNetwork(Person p)
{
    List<Person> people = new List<Person>();
    ListPeopleInNetwork(p, people);
    return people;

}

Операция GetMutualFriends принимает параметр типа Person и возвращает всех друзей в списке, которые также имеют этого человека в списке friends .

public List<Person> GetMutualFriends(Person p)
{
    List<Person> mutual = new List<Person>();
    foreach (Person friend in p.Friends)
    {
        if (friend.Friends.Contains(p))
            mutual.Add(friend);
    }
    return mutual;
}

Операция GetCommonFriends принимает список типов Person. Ожидается, что в списке есть два Person объекта. Операция возвращает список Person объектов, которые находятся в friends списках обоих Person объектов в входном списке.

public List<Person> GetCommonFriends(List<Person> people)
{
    List<Person> common = new List<Person>();
    foreach (Person friend in people[0].Friends)
        if (people[1].Friends.Contains(friend))
            common.Add(friend);
    return common;
}

Клиент

Прокси-сервер клиента создается с помощью функции добавления ссылки на службу Visual Studio.

Создается социальная сеть, состоящая из пяти Person объектов. Клиент вызывает каждый из трех методов в службе.

Настройка, сборка и запуск примера

  1. Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.

  2. Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .

  3. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.

См. также