ObjectReferences サンプルは、サーバーとクライアント間の参照によってオブジェクトを渡す方法を示しています。 このサンプルでは、シミュレートされた ソーシャル ネットワークを使用します。 ソーシャル ネットワークは、 Person
クラスで構成され、各フレンドが Person
クラスのインスタンスであるフレンドのリストと、独自のフレンドのリストが含まれます。 これにより、オブジェクトのグラフが作成されます。 サービスは、これらのソーシャル ネットワーク上の操作を公開します。
このサンプルでは、サービスはインターネット インフォメーション サービス (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
型の一覧を受け取ります。 リストには 2 つの 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 の サービス参照の追加 機能を使用して作成されます。
5 つの Person
オブジェクトで構成されるソーシャル ネットワークが作成されます。 クライアントは、サービス内の 3 つのメソッドをそれぞれ呼び出します。
サンプルを設定、ビルド、実行するには
Windows Communication Foundation サンプル のOne-Time セットアップ手順を実行していることを確認します。
ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一または複数のコンピューター間の構成でサンプルを実行するには、「Windows Communication Foundation Samplesの実行」の手順に従います。