对象引用

ObjectReferences 示例演示如何在服务器与客户端之间通过引用来传递对象。 此示例使用模拟的社会网络。 社会网络由一个 Person 类组成,该类包含一个朋友列表,其中每个朋友都是 Person 类的一个实例,并有自己的朋友列表。 这将创建一个对象图。 服务在这些社会网络上公开操作。

在本示例中,服务是由 Internet 信息服务 (IIS) 承载的,客户端是一个控制台应用程序 (.exe)。

注意

本主题的最后介绍了此示例的设置过程和生成说明。

服务

Person 类应用了 DataContractAttribute 属性,IsReference 字段设置为 true 以将其声明为引用类型。 所有属性 (Property) 都应用了 DataMemberAttribute 属性 (Attribute)。

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

GetPeopleInNetwork 操作采用一个 Person 类型的参数,并返回网络中的所有人;也就是说,返回 friends 列表中的所有人、朋友的朋友等等(没有重复项)。

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

}

GetMutualFriends 采用一个 Person 类型的参数,返回列表中所有符合以下条件的朋友:在其 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;
}

GetCommonFriends 操作采用一个 Person 类型的列表。 该列表应当有两个 Person 对象。 该操作返回 Person 对象的列表,这些对象位于输入列表中的 friends 对象的 Person 列表中。

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

客户端

客户端代理是使用 Visual Studio 的“添加服务引用”功能创建的。

创建了一个由五个 Person 对象组成的社会网络。 客户端在服务中调用三个方法中的每一个。

设置、生成和运行示例

  1. 请确保已执行 Windows Communication Foundation 示例的一次性安装过程

  2. 若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照 Building the Windows Communication Foundation Samples中的说明进行操作。

  3. 要使用单机配置或跨计算机配置来运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。

另请参阅