オブジェクト参照

ObjectReferences のサンプルでは、サーバーとクライアント間でオブジェクトを参照渡しする方法を示します。 このサンプルでは、シミュレートされた "ソーシャル ネットワーク" を使用します。 ソーシャル ネットワークは、友人のリストを含んでいる Person クラスで構成され、このリストの各友人は、それぞれ独自の友人のリストを持つ Person クラスのインスタンスです。 これにより、オブジェクトのグラフが作成されます。 このようなソーシャル ネットワークに対する操作は、サービスによって公開されます。

この例では、サービスはインターネット インフォメーション サービス (IIS) によってホストされています。クライアントはコンソール アプリケーション (.exe) です。

Note

このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

サービス

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;
}

Client

クライアント プロキシは、Visual Studio のサービス参照の追加機能を使用して作成されます。

5 つの Person オブジェクトで構成されるソーシャル ネットワークが作成されます。 クライアントは、サービスの 3 つのメソッドをそれぞれ呼び出します。

サンプルをセットアップ、ビルド、および実行するには

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順を実行したことを確認します。

  2. ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「 Building the Windows Communication Foundation Samples」の手順に従います。

  3. 単一または複数コンピューター構成でサンプルを実行するには、「Windows Communication Foundation サンプルの実行」の手順に従います。

関連項目