WCF и подклассы - PullRequest
       38

WCF и подклассы

3 голосов
/ 14 марта 2009

У меня есть этот СервисКонтракт

[OperationContract(IsOneWay=true)]
void ProcessMessage(Message message);

и эти объекты

[DataContract]
public class Message
{
    [DataMember]
    public long Id { get; set; }

    [DataMember]
    public string Body { get; set; }
}

[DataContract]
public class ExtendedMessage : Message
{       
    [DataMember]
    public NameValueCollection AdditionalData { get; set; }
}

Будет ли справляться WCF, если я передам подкласс методу service? Или он отбросит все дополнительные свойства, отсутствующие в базовом классе?

ExtendedMessage msg = new ExtendedMessage();
...
ProcessMessage(msg);

Ответы [ 2 ]

3 голосов
/ 14 марта 2009

Я думаю, что если вы не укажете ExtendedMessage через атрибут KnownType, вы получите сообщение об ошибке. Как только вы сообщите WCF о ExtendedMessage через KnownType, он будет работать без потери данных.

Кстати, вам не нужно знать набор возможных типов во время компиляции, потому что атрибут KnownType может ссылаться на метод, который будет возвращать набор возможных типов во время выполнения.

0 голосов
/ 26 марта 2011

Вы также можете использовать атрибут ServiceKnownType для сужения области действия атрибута KnownType. Вы можете применить атрибут ServiceKnownType к конкретной операции или к контракту на обслуживание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...