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


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

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

В этом образце служба размещается в службах IIS, а клиентом является консольное приложение (EXE).

Примечание.

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

Service

К классу 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. Убедитесь, что вы выполнили процедуру однократной установки для примеров Windows Communication Foundation.

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

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

См. также