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