Почему Service LothestType не нужен для моего объекта?
-
29-09-2019 - |
Вопрос
Насколько я понимаю, каждый тип (кроме некоторых примитивов, таких как int и string), используемые в ServiceContract WCF, необходимо объявить с атрибутом Service LothingType. Но я создаю пользовательский объект, и он передается мне без проблем с WCF - хотя я не добавил для него известный ServiceType. Кто -нибудь объяснит, почему это работает?
[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;
// ...
}
Решение
Нет, это не правильно. Service Skellype (или известный типтриб на договоре данных) необходим только для типов, используемых Сервисом, но не указан в определении операции. В вашем случае вы определили операцию LoadMyObjects, которая использует класс MyObject. Поскольку операция напрямую использует MyObject, вам не нужно добавлять MyObject в качестве ServickNownType. Но если вы определите MyObject2, полученный из MyObject, вы не сможете отправить этот объект из операции LoadMyObjects, пока не объявите MyObject2 как Service LothingType.