对象引用

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

在此示例中,该服务由 Internet Information Services (IIS) 托管,客户端是控制台应用程序(.exe)。

注释

本示例的设置过程和生成说明位于本主题末尾。

服务

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

[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 示例 执行One-Time 安装过程。

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

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

另请参阅