Я довольно новичок в WCF и у меня просто вопрос, как правильно заставить работать наследование MessageContract. Упрощенная версия моей настройки выглядит следующим образом: «базовый» тип сообщения, а затем еще одно «тестовое» сообщение, которое наследуется от него.
[MessageContract]
public abstract class BaseMessage
{ }
[MessageContract]
public class TestMessage : BaseMessage
{ }
У меня асинхронный OperationContract для ServiceContract определен как:
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginFindRequest(BaseMessage request, AsyncCallback callback, object asyncState);
Проблема, которую я получаю, заключается в том, что при вызове метода BeginFindRequest и передаче экземпляра TestMessage для параметра запроса платформа WCF десериализует экземпляр TestMessage в BaseMessage на стороне службы / сервера. Поскольку это определяется как абстрактный класс, это приводит к следующей ошибке:
"Сообщение не может быть десериализовано
в MessageContract типа BaseMessage
поскольку он не имеет значения по умолчанию
(без параметров) конструктор. "
Из ограниченной информации, которую я могу найти о наследовании MessageContract, кажется, что он должен просто работать.
Итак, мой вопрос - что мне не хватает, чтобы заставить это работать; или, может быть, мне лучше определить отдельный OperationContract для ServiceContract специально для этого типа - недостаток в том, что я мог бы получить много дополнительных OperationContracts?