Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере 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 объектов. Клиент вызывает каждый из трех методов в службе.
Настройка, сборка и запуск примера
Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.
Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.