次の方法で共有


オブジェクト参照

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

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

Cc681330.note(ja-jp,VS.100).gif注 :
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

サービス

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 サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。

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

  3. 単一コンピューター構成か複数コンピューター構成かに応じて、「Running the Windows Communication Foundation Samples」の手順に従います。

Cc681330.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<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

参照

リファレンス

IsReference

概念

相互運用可能なオブジェクト参照