На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> WCF :: Как передать object
    Нужно передать Object через WCF.
    Что-то не получается =(
    ExpandedWrap disabled
          /// <summary>
          /// Объект параметра задачи
          /// </summary>
          [DataContract]
          public class TaskArgument{
              /// <summary>
              /// Имя аргумента
              /// </summary>
              [DataMember]
              public string       Name;
              /// <summary>
              /// Значение аргумента
              /// </summary>
              [DataMember]
              public object       Value;
       
              /// <summary>
              /// Конструктор
              /// </summary>
              public TaskArgument(){
                  this.Name   = string.Empty;
                  this.Value  = null;
              }
          }


    если Value - строка или число, то нормально уходит.
    Если скажем List< string > то клиент отправляет, а сервер не принимает и даже не ругается.


    Как передать тип object ?
    Сообщение отредактировано: HardRock -
      И сервер и клиент должны знать какие фактические типы могут быть переданы в качестве object еще на момент создания ссылки на сервис. Таким образом нужно или перечислить отсутствующие в контракте данных типы при помощи аттрибута ServiceKnownType или изменить тип с object на string или byte[] и сериализовать.
      То же самое касается и передачи интерфейсов, базовых (абстрактных) классов.
        Жаль что WCF сам не умеет сериализовать =(

        Сделал на бинарной сериализации и передачей в byte[] т.к. KnownTypes не подходит ибо по замыслу передавать можно что угодно.
        Сообщение отредактировано: HardRock -
          Цитата
          KnownTypes не подходит ибо по замыслу передавать можно что угодно.

          ИМХО Это неправильная архитектура. Протокол и типа данных в нем, должны быть заведомо известны.
            Цитата HardRock @
            Жаль что WCF сам не умеет сериализовать =(

            Сериализовать он как раз умеет, но как он ДЕсериализует, скажем, кастомный объект, объявленный на клиенте несколькими строками выше перед вызовом сервиса? Как минимум все SOAP-based веб-сервисы кроме примитивов могут полноценно передавать\принимать только те типы, которые объявлены в контракте данных этого сервиса.
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0.0766 ]   [ 15 queries used ]   [ Generated: 24.10.26, 15:47 GMT ]