Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az ObjectReferences minta bemutatja, hogyan adhat át objektumokat a kiszolgáló és az ügyfél közötti hivatkozások alapján. A minta szimulált közösségi hálózatokat használ. A közösségi hálózat egy Person osztályból áll, amely tartalmazza a barátok listáját, ahol minden barát az Person osztály egy példánya a saját barátaival. Ez objektumdiagramot hoz létre. A szolgáltatás ezeken a közösségi hálózatokon teszi elérhetővé a műveleteket.
Ebben a mintában a szolgáltatást az Internet Information Services (IIS) üzemelteti, az ügyfél pedig egy konzolalkalmazás (.exe).
Megjegyzés:
A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.
Szolgáltatás
Az Person osztály alkalmazott DataContractAttribute attribútummal rendelkezik, és a IsReference mező úgy van beállítva, hogy true referenciatípusként deklarálja azt. Minden tulajdonságra alkalmazva van az DataMemberAttribute attribútum.
[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; }
}
…
}
A GetPeopleInNetwork művelet egy típusparamétert Person használ, és visszaadja a hálózat összes felhasználóját, vagyis a listán szereplő friends összes embert, a barát barátait stb. ismétlődések nélkül.
public List<Person> GetPeopleInNetwork(Person p)
{
List<Person> people = new List<Person>();
ListPeopleInNetwork(p, people);
return people;
}
A GetMutualFriends művelet egy típusparamétert Person vesz fel, és visszaadja a listában szereplő összes ismerőst, aki szintén szerepel a friends listán.
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;
}
A GetCommonFriends művelet egy Person típusú listát vesz fel. A lista várhatóan két Person objektumot tartalmaz. A művelet azoknak az Person objektumoknak a listáját adja vissza, amelyek a friends bemeneti listában szereplő mindkét Person objektum listájában szerepelnek.
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;
}
Ügyfél
Az ügyfélproxy a Visual Studio Szolgáltatáshivatkozás hozzáadása funkciójával jön létre.
Létrejön egy öt Person objektumból álló közösségi hálózat. Az ügyfél mind a három metódust meghívja a szolgáltatásban.
A példa beállítása, elkészítése és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.
A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.
Ha a mintát egy vagy több gép közötti konfigurációban szeretné futtatni, kövesse A Windows Communication Foundation-minták futtatásacímű témakör utasításait.