Megosztás:


Objektumhivatkozások

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

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

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

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

Lásd még