WCF mit gemeinsam genutzten Objekten und abgeleiteten Klassen auf dem Client
-
28-09-2019 - |
Frage
Ich habe einen WCF-Dienst, und ich teile Typen mit einem Client in einer Baugruppe geteilt. Wenn der Kunde eine abgeleitete Klasse erstellen wird es möglich sein, den abgeleiteten Typen zu dem Dienst zu übergeben, damit ich die zusätzlichen Eigenschaften durch Reflexion lesen kann?
Ich habe versucht, aber da die Service-Themen mit KnownTypes mit weiß nicht, wie die abgeleiteten Typ deserialisiert.
[Serializable]
public abstract class Car : ICar
{........
// auf dem Client:
[Serializable]
public class MyCar : Car
{......
beim Passieren myCar auf Service erhält ich die Ausnahme über Knowntype beschweren, aber ich kann diese auf dem Server hinzufügen, da ich weiß, würde nicht, was der Kunde durch das Senden und ich mag zusätzliche Eigenschaften durch Reflexion behandeln.
Mögliche Client-Typen wie knowntypes zur Laufzeit?
registrieren
Ist das vielleicht die Lösung?
http://blogs.msdn.com/b/ Sowmy / Archiv / 2006/03/26 / 561188.aspx
Lösung
Dies ist nicht möglich. Sowohl der Service und Client muss wissen, welche Arten werden in Nachrichten gesendet werden. Wenn Sie bekannten Typs verwenden wollen, müssen Sie auf den Dienst, den Bezug auf Elterntyp definieren.
Warum brauchen Sie zusätzliche Eigenschaften auf dem Server wissen?
Andere Tipps
Ich denke, es gibt einen Weg.
Ich erinnere mich vage, dass, wenn ich WCF studiert, ich Extension erfüllt, welche ein Mechanismus sein sollte, alles zu bekommen, die nicht die Serialisierung der Klasse entspricht. wenn Sie Extension zum Beispiel ermöglichen, und Sie sind in dieser Situation
//Server
public class GenericRQ
{
public string GenericProperty {get;set;}
}
public Service GenericService
{
Public void GenericMethod(GenericRQ RQ)
{
}
}
// client
Public class MoreSpecificRQ : GenericRQ
{
public string SpecificProperty {get;set;}
}
Public void GenericMethod(GenericRQ RQ)
{
// the serializer adds automatically in RQ.ExtensionData everything that has come and that does not match the class GenericRQ.
}
Auf wie Extension aktivieren Sie im Web
leicht durchsuchen