Compartir vía


Referencias de objeto

En el ejemplo ObjectReferences se muestra cómo pasar objetos por referencia entre el servidor y el cliente. En el ejemplo se usan redes sociales simuladas. Una red social consta de una Person clase que contiene una lista de amigos en la que cada amigo es una instancia de la Person clase, 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 servicio se hospeda en Internet Information Services (IIS) y el cliente es una aplicación de consola (.exe).

Nota:

El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.

Servicio

La Person clase tiene aplicado el DataContractAttribute atributo , con el IsReference campo establecido en true para declararlo como un tipo de referencia. Todas las propiedades tienen aplicado el DataMemberAttribute atributo .

[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 GetPeopleInNetwork operación toma un parámetro de tipo Person y devuelve todas las personas de la red; es decir, todas las personas de la friends lista, los amigos del amigo, etc., sin duplicados.

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

}

La GetMutualFriends operación toma un parámetro de tipo Person y devuelve todos los amigos de la lista que también tienen a esta persona en su 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;
}

La operación GetCommonFriends toma una lista de tipo Person. Se espera que la lista tenga dos Person objetos en ella. 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;
}

Cliente

El proxy de cliente se crea mediante la característica Agregar referencia de servicio de Visual Studio.

Se crea una red social que consta de cinco Person objetos. El cliente llama a cada uno de los tres métodos del servicio.

Para configurar, compilar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

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

  3. Para ejecutar el ejemplo en una configuración de una máquina única o entre máquinas, siga las instrucciones de Ejecución de los ejemplos de Windows Communication Foundation.

Consulte también