Laden...

WCF und Polymorphismus/Abgeleitete Klassen

Erstellt von Majestic1987 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.771 Views
M
Majestic1987 Themenstarter:in
20 Beiträge seit 2010
vor 13 Jahren
WCF und Polymorphismus/Abgeleitete Klassen

Hallo Leute,

ich befasse mich gerade für ein Projekt mit WCF. Es geht, ganz grob, um folgendes:

Ich entwickle ein Prozessleitsystem. Das ganze soll auf einer Client-Server-Architektur basieren:

Der Server macht den Datenaustausch mit dem Steuerungssystem und bildet die dort befindlichen Objekte (z.B. Antriebssysteme, Temperaturregelungen, etc.) in einer Hashtable ab. Dabei ist jedes Objekt abgeleitet vom Basistyp "Gerät".

Wenn sich jetzt etwas tut (Motortemperatur steigt z.B.) so soll diese Änderung an einem Bedienpanel (Client) angezeigt werden.

Der Server sagt also beim Client bescheid "Hier hat sich am Objekt mit diesem und jenen Key was getan" und der Client ruft dann über WCF eine Methode des Service auf. Diese möchte ich aber offen gestalten. Ich würde also den Key übergeben und das zugehörige Objekt von der Methode zurückgegeben bekommen.

Hier ist der Haken: Ich müsste das Objekt als Typ "Gerät" zurückliefern. Dann hab ich allerdings ein Problem: Wenn es beim Client ankommt ist es wirklich nur noch ein Gerät, alle Informationen der abgeleiteten Klasse, z.B. "Motor" sind weg.

Was kann ich da tun? Oder ist mein Ansatz zu umständlich und es geht auch besser?

Vielen Dank schonmal im Voraus.

925 Beiträge seit 2004
vor 13 Jahren

Ganz schnell, ohne groß nachzudenken würde ich sagen: liefere und speichere den Type mit! Dann kannst du auf Clientseite entsprechend casten.

L
667 Beiträge seit 2004
vor 13 Jahren

Würde ich auch so machen, wobei ich nicht weiß ob WCF den "Type" Typ serialisieren kann. Falls nicht kannst Du auch den Type.FullName als string mitschicken und auf der Gegenseite per Reflection wieder anlegen.

"It is not wise to be wise" - Sun Tzu

M
153 Beiträge seit 2010
vor 13 Jahren

Vielleicht verstehe ich das Problem nicht recht, aber es ist doch ohne weiteres möglich, den Rückgabetyp als zum Beispiel "Gerät" zu deklarieren, als tatsächlich übergebenen Typ aber eine Ableitung davon, sagen wir "Temperaturregelung".

Wichtig ist doch nur, dass das KnowTyp-Attribut angegeben wird, auf der Basisklasse, für jede abgeleitete Klasse.

925 Beiträge seit 2004
vor 13 Jahren

Ich würde nicht Type.FullName mitschicken, sondern sogar Type.AssemblyQualifiedName

Wichtig ist doch nur, dass das KnowTyp-Attribut angegeben wird, auf der Basisklasse, für jede abgeleitete Klasse.

Okay, das ist natürlich auch 'ne Möglichkeit. Muss man halt nur kennen...