Dela via


Objektreferenser

ObjectReferences-exemplet visar hur du skickar objekt efter referenser mellan server och klient. Exemplet använder simulerade sociala nätverk. Ett socialt nätverk består av en Person klass som innehåller en lista över vänner där varje vän är en instans av Person klassen, med en egen lista över vänner. Då skapas ett diagram över objekt. Tjänsten exponerar åtgärder på dessa sociala nätverk.

I det här exemplet hanteras tjänsten av Internet Information Services (IIS) och klienten är ett konsolprogram (.exe).

Kommentar

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

Tjänst

Klassen Person har attributet DataContractAttribute tillämpat, med fältet IsReference inställt på för att true deklarera det som en referenstyp. Alla egenskaper har attributet DataMemberAttribute tillämpat.

[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; }
    }
…
}

Åtgärden GetPeopleInNetwork tar en parameter av typen Person och returnerar alla personer i nätverket, dvs. alla personer i friends listan, vännens vänner och så vidare, utan dubbletter.

public List<Person> GetPeopleInNetwork(Person p)
{
    List<Person> people = new List<Person>();
    ListPeopleInNetwork(p, people);
    return people;

}

Åtgärden GetMutualFriends tar en parameter av typen Person och returnerar alla vänner i listan som också har den här personen i listan 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;
}

Åtgärden GetCommonFriends tar en lista av typen Person. Listan förväntas ha två Person objekt i den. Åtgärden returnerar en lista över Person objekt som finns i friends listorna över båda Person objekten i indatalistan.

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

Klientproxyn skapas med hjälp av funktionen Lägg till tjänstreferens i Visual Studio.

Ett socialt nätverk som består av fem Person objekt skapas. Klienten anropar var och en av de tre metoderna i tjänsten.

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.

  2. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

  3. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.

Se även