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
Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.
Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.
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.