Почему Service LothestType не нужен для моего объекта?

StackOverflow https://stackoverflow.com/questions/3522515

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top