Odwołania do obiektów
W przykładzie ObjectReferences pokazano, jak przekazywać obiekty przez odwołania między serwerem a klientem. W przykładzie użyto symulowanych sieci społecznościowych. Sieć społecznościowa składa się z Person
klasy, która zawiera listę przyjaciół, w których każdy przyjaciel jest wystąpieniem Person
klasy, z własną listą przyjaciół. Spowoduje to utworzenie grafu obiektów. Usługa uwidacznia operacje w tych sieciach społecznościowych.
W tym przykładzie usługa jest hostowana przez usługi Internet Information Services (IIS), a klient jest aplikacją konsolową (.exe).
Uwaga
Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.
Usługa
Klasa Person
ma DataContractAttribute zastosowany atrybut z IsReference polem ustawionym na wartość , aby zadeklarować true
ją jako typ odwołania. Wszystkie właściwości mają DataMemberAttribute zastosowany atrybut.
[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; }
}
…
}
Operacja GetPeopleInNetwork
przyjmuje parametr typu Person
i zwraca wszystkie osoby w sieci. Oznacza to, że wszystkie osoby na friends
liście, przyjaciele przyjaciela itd. bez duplikatów.
public List<Person> GetPeopleInNetwork(Person p)
{
List<Person> people = new List<Person>();
ListPeopleInNetwork(p, people);
return people;
}
Operacja GetMutualFriends
przyjmuje parametr typu Person
i zwraca wszystkich znajomych na liście, którzy również mają tę osobę na friends
liście.
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;
}
Operacja GetCommonFriends
przyjmuje listę typu Person
. Oczekuje się, że lista będzie zawierać dwa Person
obiekty. Operacja zwraca listę Person
obiektów znajdujących się na friends
listach obu Person
obiektów na liście danych wejściowych.
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;
}
Klient
Serwer proxy klienta jest tworzony przy użyciu funkcji Dodaj odwołanie do usługi programu Visual Studio.
Tworzona jest sieć społecznościowa składająca się z pięciu Person
obiektów. Klient wywołuje każdą z trzech metod w usłudze.
Aby skonfigurować, skompilować i uruchomić przykład
Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.
Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).
Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.