Odkazy na objekty
Ukázka ObjectReferences ukazuje, jak předávat objekty odkazy mezi serverem a klientem. Ukázka používá simulované sociální sítě. Sociální síť se skládá ze Person
třídy, která obsahuje seznam přátel, ve kterých je každý přítel instancí Person
třídy, s vlastním seznamem přátel. Tím se vytvoří graf objektů. Služba zveřejňuje operace v těchto sociálních sítích.
V této ukázce je služba hostovaná službou Internetová informační služba (IIS) a klient je konzolová aplikace (.exe).
Poznámka:
Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.
Služba
Třída Person
má DataContractAttribute použitý atribut s IsReference polem nastaveným tak, aby true
ho deklaroval jako typ odkazu. Všechny vlastnosti mají DataMemberAttribute použitý atribut.
[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; }
}
…
}
Tato GetPeopleInNetwork
operace přebírá parametr typu Person
a vrací všechny lidi v síti. To znamená, že všichni lidé v friends
seznamu, přátelé přítele atd. bez duplicit.
public List<Person> GetPeopleInNetwork(Person p)
{
List<Person> people = new List<Person>();
ListPeopleInNetwork(p, people);
return people;
}
Operace GetMutualFriends
přebírá parametr typu Person
a vrátí všechny přátele v seznamu, kteří mají také tuto osobu v friends
seznamu.
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;
}
Operace GetCommonFriends
přebírá seznam typu Person
. Očekává se, že seznam bude obsahovat dva Person
objekty. Operace vrátí seznam Person
objektů, které jsou v friends
seznamech obou Person
objektů ve vstupním seznamu.
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
Proxy klienta se vytvoří pomocí funkce Přidat odkaz na službu sady Visual Studio.
Vytvoří se sociální síť, která se skládá z pěti Person
objektů. Klient volá všechny tři metody ve službě.
Nastavení, sestavení a spuštění ukázky
Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.
Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.