Jestem całkiem nowy w WCF i mam tylko pytanie, jak poprawnie uzyskać dziedziczenie MessageContract. Uproszczona wersja mojej konfiguracji wygląda następująco: "podstawowy" typ komunikatu, a następnie kolejna wiadomość "testowa", która po niej dziedziczy.WCF MessageContract Inheritance
[MessageContract]
public abstract class BaseMessage
{ }
[MessageContract]
public class TestMessage : BaseMessage
{ }
Mam następnie asynchronicznego OperationContract na ServiceContract zdefiniowany jako:
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginFindRequest(BaseMessage request, AsyncCallback callback, object asyncState);
problem, że jestem coraz to podczas wywoływania metody BeginFindRequest i przechodzącą w instancji TestMessage parametru żądanie, struktura WCF odformalizuje instancję TestMessage do BaseMessage po stronie usługi/serwera. Jak to jest zdefiniowane jako abstrakcyjne klasy, to wyniki w następujący błąd:
"The message cannot be deserialized into MessageContract type BaseMessage since it does not have a default (parameterless) constructor."
Z ograniczonych informacji, które mogę znaleźć na MessageContract dziedziczenia, wydaje się, że powinien po prostu pracować.
Moje pytanie brzmi: czego mi brakuje, aby to zadziałało; czy powinienem raczej zdefiniować oddzielne OperationContract na ServiceContract specjalnie dla tego typu - wadą jest to, że mogłem skończyć z wieloma dodatkowymi OperationContracts?
PS - Używam net.tcp i NetDataContractSerializer (na obu klientach/serwerach). –
Hej Frank - użyj "przycisku kodu" (tego z 010101010110), aby sformatować sekcje kodu jako takie. Ładuje je ładnie i składnia je podkreśli - gorąco polecam! –
Dzięki Marc, zastanawiałeś się, jak to zrobiłeś! –