Клиент данных WCF не отправляет значения свойств объекта

Когда я пытаюсь отправить экземпляр типа МУЛЬТИМЕДИА, с

hasStream="true"

Если установлено значение true, сервер данных WCF, по-видимому, не получает данные объекта.

На стороне клиента я перебираю коллекцию объектов и пытаюсь отправить их в другую службу данных wcf. Ссылка на "другую службу данных wcf":

this.centralCtx

Также я устанавливаю сохраненный поток для каждого нового объекта и инициализирую все свойства, копируя их из исходного объекта:

foreach (LOCAL_TYPE localObject in localObjects)
{
  if (entityName == "MULTIMEDIA")
       {
           CentralService.ARTICOLI article = null;
           CentralService.MULTIMEDIA multimedia = new CentralService.MULTIMEDIA();
           LocalService.MULTIMEDIA lMultimedia = localObject as LocalService.MULTIMEDIA;
           multimedia.ID_MULTIMEDIA = lMultimedia.ID_MULTIMEDIA;
           multimedia.DATA_CREAZIONE = lMultimedia.DATA_CREAZIONE;
           multimedia.DATA_ULTIMA_MODIFICA = lMultimedia.DATA_ULTIMA_MODIFICA;
           multimedia.ARTICOLO_ID = lMultimedia.ARTICOLO_ID;

           this.centralCtx.TryGetEntity(
           new Uri(this.centralCtx.BaseUri + "ARTICOLI('" + multimedia.ARTICOLO_ID 
           + "')", UriKind.Absolute), out article);

           article.MULTIMEDIA.Add(multimedia);
           this.centralCtx.AddRelatedObject(article, "MULTIMEDIA", multimedia);
           DataServiceStreamResponse streamResponse = this.localCtx.GetReadStream(localObject);
           this.centralCtx.SetSaveStream(multimedia, streamResponse.Stream, 
                      true, "image/jpeg", "");
           //this.centralCtx.UpdateObject(article);
        }
        else {
          CENTRAL_TYPE cloned = DbHelper.FlatCloneFromType<LOCAL_TYPE, CENTRAL_TYPE>
                                     (localObject, centralCtx);
          this.centralCtx.AddObject(entityName, cloned);
        }
      }

      try
      {
         this.centralCtx.SaveChanges();
         Notify(progressAction, "Exported table " + entityName, null);
         successAction(this.Log);
      }
      catch (Exception ex)
      {
         Notify(progressAction, "Error exporting table " + entityName, ex);
         this.synchResult = SynchResultType.Error;
         exceptionAction(ex);
      }

Это изменение кода перехватчика:

[ChangeInterceptor("MULTIMEDIA")]
    public void OnChangeMultimedia(MULTIMEDIA changedObject, UpdateOperations op)
    {
        switch (op)
        {
            case UpdateOperations.Add:
                if(changedObject.ID_MULTIMEDIA == null)
                    changedObject.ID_MULTIMEDIA = Guid.NewGuid().ToString();
                changedObject.STATO_INTERNO = "TRASFERITO";
                changedObject.DATA_ULTIMA_MODIFICA = changedObject.DATA_ULTIMA_MODIFICA == null
                    ? DateTime.Now.ToLocalTime() : changedObject.DATA_ULTIMA_MODIFICA;
                this.CurrentDataSource.SaveChanges();
                break;
            default: break;
        }
    }

Все свойства changeObject на сервере внутри перехватчика изменений MULTIMEDIA всегда равны нулю. Зачем?

1 ответ

Я наконец получил ответ. Отправка объекта, отмеченного атрибутом hasStream, подразумевает два запроса.

  1. Первый - это POST, во время которого сервер создает запись в базе данных и сохраняет файл в файловой системе.
  2. Вторым является MERGE, во время которого клиент выполняет обновление идентификатора, переданного с сервера.

Поэтому при первом запросе к серверу все свойства объекта равны нулю.

Другие вопросы по тегам