このサンプルでは、サーバーとクライアント間でオブジェクトを参照渡しする方法を示します。このサンプルでは、シミュレートされたソーシャル ネットワークを使用します。ソーシャル ネットワークは、友人のリストを含んでいる 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 サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一コンピューター構成か複数コンピューター構成かに応じて、「Running the Windows Communication Foundation Samples」の手順に従います。
![]() |
---|
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。
<InstallDrive>:\WF_WCF_Samples
このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。
<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Contract\Data\ObjectReferences
|