Почему ServiceKnownType не нужен для моего объекта? - PullRequest
1 голос
/ 19 августа 2010

Насколько я понимаю, каждый тип (кроме некоторых примитивов, таких как int и string), используемый в WCF ServiceContract, должен быть объявлен с атрибутом ServiceKnownType. Но я создал пользовательский объект, и он без проблем передается через мой сервис WCF - хотя я не добавил для него ServiceKnownType. Кто-нибудь, пожалуйста, объясните, почему это работает?

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
public interface IMyService
{
    [OperationContract]
    List<MyObject> LoadMyObjects();
}

[DataContract]
public class MyObject
{
    [DataMember]
    private int batchID;
    [DataMember]
    private int fileID;
    [DataMember]
    private string fileName;
    [DataMember]
    private DateTime importStartTime;
// ...
}

1 Ответ

7 голосов
/ 19 августа 2010

Нет, это не правильно. ServiceKnownType (или KnownTypeAttribute в контракте данных) требуется только для типов, используемых службой, но не указанных в определении операции. В вашем случае вы определили операцию LoadMyObjects, которая использует класс MyObject. Поскольку операция напрямую использует MyObject, вам не нужно добавлять MyObject как ServicKnownType. Но если вы определите MyObject2, производный от MyObject, вы не сможете отправить этот объект из операции LoadMyObjects, пока не объявите MyObject2 как ServiceKnownType.

...