WCF - объект как известный тип - › интероперабельный?

На самом деле должен быть прямой ответ на этот вопрос (о свойстве «Объект» ниже):

Имея следующий контракт данных:

    [KnownType(typeof(bool))]
    [KnownType(typeof(int))]
    [KnownType(typeof(string))]
    [KnownType(typeof(Customer))]
    [KnownType(typeof(Client))]
    public class Transaction
    {    
        // properties
        [DataMember(Name = "UID")]
        public int UID{}

        [DataMember(Name = "Type")]
        public Enums.TransactionType Type{}

        [DataMember(Name = "Data")]
        public Object Data{}
    }

и следующий сервисный контракт:

public interface IService
{
      [OperationContract(Name = "GetData")]
      List<Transaction> GetTransact();
}

Будет ли это интероперабельно? Говоря из Java, gSoap? Если нет, то как я могу сделать его совместимым?

Спасибо.

EDIT: я просто хочу знать, знает ли WCF, как сериализовать/десериализовать объект из/в определенные известные типы.


person Learner    schedule 12.05.2011    source источник


Ответы (1)


Все должно быть в порядке, если клиент может правильно генерировать типы из WSDL. Например, в зависимости от клиента, он может изменить List<Transaction> C# на Transaction[] или что-то довольно эквивалентное. Вам также нужно будет выбрать правильный тип привязки. Обычно basicHttpBinding дает наилучшие результаты для взаимодействия.

person CodingWithSpike    schedule 12.05.2011
comment
да, это ясно... Но я просто хочу знать, знает ли WCF, как сериализовать/десериализовать из объекта, используя определенные известные типы. - person Learner; 12.05.2011
comment
Вещи, добавленные как [KnownType], должны сообщить о них сериализатору, а также добавить их в WSDL. Если сериализатор получает объект, то да, он будет сканировать известные типы в поисках подходящего. Обычно это в большей степени связано с наследованием. - person CodingWithSpike; 12.05.2011
comment
Кроме того, извините, я не заметил, когда впервые посмотрел на это, что один из ваших членов данных был типа Object. В этом случае я ожидаю, что WCF будет нормально обрабатывать поле Object Data, если фактический экземпляр имеет тип Customer или Client. При сериализации он будет знать тип экземпляра, а при десериализации — по имени типа, переданному в сообщении SOAP. - person CodingWithSpike; 12.05.2011
comment
Большое спасибо за ваш ответ ... Я начну делать это. Как только это сработает, я приму ваш ответ :) Кстати, я начал этот вопрос, когда увидел, что приложение MS WCF Test Client сообщает об ошибках моей функции из-за возвращаемого объекта. - person Learner; 13.05.2011