Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O exemplo ObjectReferences demonstra como passar objetos por referências entre o servidor e o cliente. O exemplo usa redes sociais simuladas. Uma rede social consiste em uma Person classe que contém uma lista de amigos em que cada amigo é uma instância da Person classe, com sua própria lista de amigos. Isso cria um grafo de objetos. O serviço expõe operações nessas redes sociais.
Neste exemplo, o serviço é hospedado pelo 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 build para este exemplo estão localizados 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 DataMemberAttribute atributo 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 GetPeopleInNetwork operação usa um parâmetro de tipo Person e retorna todas as pessoas na rede; ou seja, todas as pessoas na friends lista, 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 GetMutualFriends operação usa um parâmetro de tipo Person e retorna todos os amigos na lista que também têm essa pessoa em sua friends lista.
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 operação usa uma lista do tipo Person. Espera-se que a lista tenha dois Person objetos nela. A operação retorna uma lista de objetos Person que estão presentes 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 Adicionar Referência de Serviço do Visual Studio.
Uma rede social que consiste em cinco Person objetos é criada. O cliente invoca cada um dos três métodos do serviço.
Para configurar, compilar e executar o exemplo
Verifique se você executou o Procedimento de instalação avulsa dos exemplos do Windows Communication Foundation.
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.
Para executar o exemplo em uma configuração única ou entre máquinas, siga as instruções em Executando os exemplos do Windows Communication Foundation.