WCF MessageContract Inheritance
Ich bin ziemlich neu in WCF und habe nur eine Frage, wie die MessageContract-Vererbung richtig funktioniert. Eine vereinfachte Version meines Setups ist wie folgt: Ein "Basis" -Nachrichtentyp und dann eine weitere "Test" -Nachricht, die von ihm erbt.
[MessageContract]
public abstract class BaseMessage
{ }
[MessageContract]
public class TestMessage : BaseMessage
{ }
Ich habe dann einen asynchronen OperationContract für einen ServiceContract definiert als:
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginFindRequest(BaseMessage request, AsyncCallback callback, object asyncState);
Das Problem, das ich bekomme, ist, wenn ich die BeginFindRequest-Methode aufrufe und eine TestMessage-Instanz für den Anforderungsparameter übergebe, deserialisiert das WCF-Framework die TestMessage-Instanz für BaseMessage auf der Dienst- / Serverseite. Da dies als abstrakte Klasse definiert ist, führt dies zu folgendem Fehler:
"Die Nachricht kann nicht in den MessageContract-Typ BaseMessage deserialisiert werden, da sie keinen Standardkonstruktor (ohne Parameter) hat."
Aufgrund der begrenzten Informationen, die ich in der MessageContract-Vererbung finden kann, scheint es, dass es nur funktionieren sollte.
Meine Frage ist also: Was fehlt mir, damit das funktioniert? oder sollte ich vielleicht lieber einen eigenen operationcontract auf dem servicecontract speziell für diesen typ definieren - mit dem nachteil, dass ich am ende viele zusätzliche operationcontracts haben könnte?