Condividi tramite


Riferimenti agli oggetti

Nell’esempio ObjectReferences viene illustrato come passare oggetti mediante riferimenti tra server e client. L'esempio utilizza social network fittizie. Una social network è costituita da una classe Person che contiene un elenco di amici in cui ogni amico è un'istanza della classe Person, con il proprio elenco di amici. Viene creato un grafico degli oggetti. Il servizio espone le operazioni in tali social network.

In questo esempio, il servizio è ospitato da Internet Information Services (IIS) e il client è un'applicazione console (.exe).

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.

Servizio

Alla classe Person è applicato l'attributo DataContractAttribute, con il campo IsReference impostato su true per dichiararlo come tipo di riferimento. A tutte le proprietà è applicato l'attributo DataMemberAttribute.

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

L'operazione GetPeopleInNetwork accetta un parametro di tipo Person e restituisce tutte le persone nella rete, ovvero tutte le persone nell'elenco friends, gli amici degli amici e così via, senza duplicati.

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

}

L'operazione GetMutualFriends accetta un parametro di tipo Person e restituisce tutti gli amici nell'elenco nei cui elenchi friends è inclusa questa persona.

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

L'operazione GetCommonFriends accetta un elenco di tipo Person. È previsto che l'elenco contenga due oggetti Person. L'operazione restituisce un elenco di oggetti Person inclusi negli elenchi friends di entrambi gli oggetti Person nell'elenco di input.

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

Client

Il proxy client viene creato usando la funzionalità Aggiungi riferimento al servizio di Visual Studio.

Viene creata una social network costituita da cinque oggetti Person. Il client chiama ognuno dei tre metodi nel servizio.

Per impostare, compilare ed eseguire l'esempio

  1. Assicurarsi di aver eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.

  2. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples.

  3. Per eseguire l'esempio in un solo computer o tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.

Vedi anche