オブジェクト参照

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 つのメソッドをそれぞれ呼び出します。

サンプルを設定、ビルド、実行するには

  1. Windows Communication Foundation サンプル のOne-Time セットアップ手順を実行していることを確認します。

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

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

こちらも参照ください