Udostępnij przez


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ół, gdzie każdy przyjaciel jest instancją 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 / Notatka

Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.

Usługa

Klasa Person ma zastosowany atrybut DataContractAttribute z polem IsReference ustawionym na true, aby zadeklarować ją jako typ odwołania. Wszystkie właściwości mają atrybut DataMemberAttribute zastosowany.

[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 usługi.

Aby skonfigurować, skompilować i uruchomić przykładowy program

  1. Upewnij się, że wykonano procedurę instalacji One-Time dla przykładów programu Windows Communication Foundation.

  2. Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w Kompilowanie przykładów Windows Communication Foundation.

  3. Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w Uruchamianie przykładów programu Windows Communication Foundation.

Zobacz także