此示例演示如何在服务器与客户端之间通过引用来传递对象。此示例使用模拟的社会网络**。社会网络由一个 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
对象的列表,这些对象位于输入列表中的 Person
对象的 friends
列表中。
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
对象组成的社会网络。客户端在服务中调用三个方法中的每一个。
设置、生成和运行示例
若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。
若要用单机配置或跨计算机配置来运行示例,请按照Running the Windows Communication Foundation Samples中的说明进行操作。
![]() |
---|
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\WF_WCF_Samples
如果此目录不存在,请访问针对 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:
<安装驱动器>:\WF_WCF_Samples\WCF\Basic\Contract\Data\ObjectReferences
|