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
个对象组成的社交网络。 客户端调用服务中的三种方法中的每一个。
设置、生成和运行示例
确保已为 Windows Communication Foundation 示例 执行One-Time 安装过程。
若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。
若要在单台计算机或跨计算机配置中运行示例,请按照 运行 Windows Communication Foundation 示例中的说明进行操作。