Referencias a objetos
El ejemplo ObjectReferences muestra cómo pasar los objetos por referencias entre el servidor y cliente. En el ejemplo se utilizan redes sociales simuladas. Una red social está compuesta de una clase Person
que contiene una lista de amigos en la que cada amigo es una instancia de la clase Person
, con su propia lista de amigos. Esto crea un gráfico de objetos. El servicio expone las operaciones en estas redes sociales.
En este ejemplo, el cliente es una aplicación de consola (.exe) e Internet Information Services (IIS) hospeda el servicio.
Nota
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
Servicio
La clase Person
tiene el atributo DataContractAttribute aplicado, con el campo IsReference establecido como true
para declararlo como un tipo de referencia. Todas las propiedades tienen el 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; }
}
…
}
La operación GetPeopleInNetwork
toma un parámetro de tipo Person
y devuelve a todas las personas en la red; es decir, todas las personas de la lista friends
, los amigos de cada amigo, etc., sin duplicados.
public List<Person> GetPeopleInNetwork(Person p)
{
List<Person> people = new List<Person>();
ListPeopleInNetwork(p, people);
return people;
}
La operación GetMutualFriends
toma un parámetro de tipo Person
y devuelve a todos los amigos de la lista que también tienen a esta persona en su 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;
}
La operación GetCommonFriends
toma una lista de tipo Person
. Se espera que la lista contenga dos objetos Person
. La operación devuelve una lista de los objetos Person
que están en las listas friends
de ambos objetos Person
en la 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;
}
Remoto
El proxy de cliente se crea mediante la característica Agregar referencia de servicio de Visual Studio.
Se crea una red social que está compuesta de cinco objetos Person
. El cliente llama a cada uno de los tres métodos del servicio.
Configurar, compilar y ejecutar el ejemplo
Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.
Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.
Para ejecutar el ejemplo en una configuración de una sola máquina o de varias máquinas, siga las instrucciones que se indican en Ejecución de los ejemplos de Windows Communication Foundation.