ObjektverweiseObject References

In diesem Beispiel wird veranschaulicht, wie Objekte als Verweis zwischen Server und Client übergeben werden.This sample demonstrates how to pass objects by references between server and client. Das Beispiel verwendet simuliert sozialen Netzwerken.The sample uses simulated social networks. Ein gesellschaftliches Netzwerk besteht aus einer Person-Klasse, die eine Liste von Freunden enthält, wobei jeder Freund eine Instanz der Person-Klasse mit eigener Liste von Freunden ist.A social network consists of a Person class that contains a list of friends in which each friend is an instance of the Person class, with its own list of friends. Damit wird ein Objektdiagramm erstellt.This creates a graph of objects. Der Dienst macht Operationen in diesen gesellschaftlichen Netzwerken verfügbar.The service exposes operations on these social networks.

In diesem Beispiel wird der Dienst von Internetinformationsdiensten (IIS) gehostet, und der Client ist eine Konsolenanwendung (.exe).In this sample, the service is hosted by Internet Information Services (IIS) and the client is a console application (.exe).

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

DienstService

Auf die Person-Klasse wurde das DataContractAttribute-Attribut angewendet, wobei das IsReference-Feld zur Deklaration als Verweistyp auf true festgelegt wurde.The Person class has the DataContractAttribute attribute applied, with the IsReference field set to true to declare it as a reference type. Auf alle Eigenschaften wurde das DataMemberAttribute-Attribut angewendet.All properties have the DataMemberAttribute attribute applied.

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

Der GetPeopleInNetwork-Vorgang akzeptiert einen Parameter vom Typ Person und gibt alle Personen im Netzwerk; d. h. alle Personen in der friends-Liste, die Freunde des Freundes usw. ohne Duplikate zurück.The GetPeopleInNetwork operation takes a parameter of type Person and returns all the people in the network; that is, all the people in the friends list, the friend's friends, and so on, without duplicates.

public List<Person> GetPeopleInNetwork(Person p)  
{  
    List<Person> people = new List<Person>();  
    ListPeopleInNetwork(p, people);  
    return people;  

}  

Der GetMutualFriends-Vorgang akzeptiert einen Parameter vom Typ Person und gibt alle Freunde in der Liste zurück, die diese Person ebenfalls in ihrer friends-Liste haben.The GetMutualFriends operation takes a parameter of type Person and returns all the friends in the list who also have this person in their friends list.

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

Der GetCommonFriends-Vorgang akzeptiert eine Liste vom Typ Person.The GetCommonFriends operation takes a list of type Person. Es wird erwartet, dass die Liste zwei Person-Objekte enthält.The list is expected to have two Person objects in it. Der Vorgang gibt eine Liste von Person-Objekten zurück, die in den friends-Listen beider Person-Objekte in der Eingabeliste enthalten sind.The operation returns a list of Person objects that are in the friends lists of both Person objects in the input list.

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

ClientClient

Der Clientproxy wird erstellt, mit der Hinzufügen eines Dienstverweises Feature von Visual StudioVisual Studio.The client proxy is created using the Add Service Reference feature of Visual StudioVisual Studio.

Ein gesellschaftliches Netzwerk wird erstellt, das aus fünf Person-Objekten besteht.A social network that consists of five Person objects is created. Der Client ruft jede der drei Methoden im Dienst auf.The client calls each of the three methods in the service.

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Contract\Data\ObjectReferences

Siehe auchSee Also

IsReference
Interoperable ObjektverweiseInteroperable Object References