Метод WCF, который обновляет объект, переданный в - PullRequest
0 голосов
/ 31 марта 2010

Правильно ли я считаю, что если у меня WCF, OperationContract получает объект и должен установить свойство для этого объекта, чтобы клиент получал обновление, мне нужно объявить его для возврата объекта.

например. с учетом данных:

[DataContract]
public class CompositeType
{
    [DataMember]
    public int Key { get; set; }

    [DataMember]
    public string Something { get; set; }
}

это не будет работать с WCF:

public void GetDataUsingDataContract(CompositeType composite)
{
  composite.Key = 42;              
}

это будет работать:

public CompositeType GetDataUsingDataContract(CompositeType composite)
{
  composite.Key = 42;

  return new CompositeType
  {
    Key = composite.Key,
    Something = composite.Something
  };           
}

Ответы [ 2 ]

1 голос
/ 31 марта 2010

IMO, авторские методы, которые производят вывод через побочные эффекты, являются "плохой" вещью. Сказав, однако, есть ли обстоятельства, которые требуют этой модели? Да.

Конечно, модель программирования C # допускает это, WCF нарушена? Нет. В определенный момент нужно понимать, что они потребляют WCF, и в качестве структуры он пытается удовлетворить большинство сценариев использования [например, реплицировать все входные параметры во всех обходах, чтобы сохранить неявную семантику побочных эффектов это, одним словом, глупо.

Конечно, есть способы обойти это - C # также обеспечивает явное объявление этих сценариев, и WCF также поддерживает их!

Например

// use of "ref" indicates argument should be returned to 
// caller, black-eye and all!
public void GetDataUsingDataContract (ref CompositeType composite) 
{
    composite.Key = 42;         
}

Попробуй!

Надеюсь, это поможет:)

1 голос
/ 31 марта 2010

Если вы используете WCF «из коробки», вы фактически используете форму веб-сервисов, которая использует сериализованные версии объектов, которые отправляются с клиента на сервер.По этой причине вы не можете «по ссылке» изменять свойства объектов.Вы всегда должны будете использовать шаблон запроса / ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...