Objektverweise
Im Beispiel ObjectReferences wird veranschaulicht, wie Objekte als Verweis zwischen Server und Client übergeben werden. Im Beispiel werden simulierte gesellschaftliche Netzwerke verwendet. 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. Damit wird ein Objektdiagramm erstellt. Der Dienst macht Operationen in diesen gesellschaftlichen Netzwerken verfügbar.
In diesem Beispiel wird der Dienst von Internetinformationsdiensten (IIS) gehostet, und der Client ist eine Konsolenanwendung (.exe).
Hinweis
Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.
Dienst
Auf die Person
-Klasse wurde das DataContractAttribute-Attribut angewendet, wobei das IsReference-Feld zur Deklaration als Verweistyp auf true
festgelegt wurde. Auf alle Eigenschaften wurde das DataMemberAttribute-Attribut angewendet.
[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.
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.
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
. Es wird erwartet, dass die Liste zwei Person
-Objekte enthält. Der Vorgang gibt eine Liste von Person
-Objekten zurück, die in den friends
-Listen beider Person
-Objekte in der Eingabeliste enthalten sind.
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
Der Client-Proxy wird mit der Funktion Dienstreferenz hinzufügen von Visual Studio erstellt.
Ein gesellschaftliches Netzwerk wird erstellt, das aus fünf Person
-Objekten besteht. Der Client ruft jede der drei Methoden im Dienst auf.
So können Sie das Beispiel einrichten, erstellen und ausführen
Stellen Sie sicher, dass Sie die Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.
Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.
Wenn Sie das Beispiel in einer Konfiguration mit einem Computer oder über Computer hinweg ausführen möchten, folgen Sie den Anweisungen unter Durchführen der Windows Communication Foundation-Beispiele.