Compartilhar via


Referências de objeto

O exemplo ObjectReferences demonstra como passar objetos por referências entre servidor e cliente. O exemplo usa redes sociais simuladas. Uma rede social consiste em uma classe Person que contém uma lista de amigos em que cada amigo é uma instância da classe Person, com sua própria lista de amigos. Isso cria um gráfico de objetos. O serviço expõe as operações nessas redes sociais.

Neste exemplo, o serviço é hospedado pelos IIS (Serviços de Informações da Internet), e o cliente é um aplicativo de console (.exe).

Observação

O procedimento de instalação e as instruções de compilação dessa amostra estão no final deste tópico.

Serviço

A classe Person tem o atributo DataContractAttribute aplicado, com o campo IsReference definido como true para declará-lo como um tipo de referência. Todas as propriedades têm o atributo DataMemberAttribute aplicado.

[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 operação GetPeopleInNetwork recebe um parâmetro do tipo Person e retorna todas as pessoas na rede; ou seja, todas as pessoas na lista friends, os amigos do amigo e assim por diante, sem duplicatas.

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

}

A operação GetMutualFriends recebe um parâmetro do tipo Person e retorna todos os amigos na lista que também possuem essa pessoa em sua lista 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;
}

A operação GetCommonFriends recebe uma lista do tipo Person. É esperado que a lista tenha dois objetos Person nela. A operação retorna uma lista de objetos Person que estão nas listas friends de ambos os objetos Person na lista de entrada.

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

Cliente

O proxy do cliente é criado usando o recurso Add Service Reference do Visual Studio.

Uma rede social que consiste em cinco objetos Person é criada. O cliente chama cada um dos três métodos no serviço.

Para configurar, compilar, e executar o exemplo

  1. Verifique se você executou o Procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Para compilar a edição .NET do C# ou do Visual Basic da solução, siga as instruções contidas em Como Compilar as Amostras do Windows Communication Foundation.

  3. Para executar o exemplo em uma configuração de computador único ou de vários computadores, siga as instruções em Como executar os exemplos do Windows Communication Foundation.

Confira também