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?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage