Compartir a través de


Referencias a objetos

En este ejemplo se 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.

Cc681330.note(es-es,VS.100).gifNota:
El procedimiento de configuració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;
}

Cliente

El proxy de cliente se crea utilizando 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.

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 Compilación de los ejemplos de Windows Communication Foundation.

  3. Para ejecutar el ejemplo en una configuración con un único equipo o con varios, siga las instrucciones de Running the Windows Communication Foundation Samples.

Cc681330.Important(es-es,VS.100).gif Nota:
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.

<InstallDrive>: \WF_WCF_Samples

Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de WF y Windows Communication Foundation (WCF). Este ejemplo se encuentra en el siguiente directorio.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Contract\Data\ObjectReferences

Vea también

Referencia

IsReference

Conceptos

Referencias a objetos interoperables