Udostępnij za pośrednictwem


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

  1. Upewnij się, że wykonano procedurę instalacji jednorazowej 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 temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).

  3. 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.

Zobacz też