Служба WCF не возвращает измененный объект

У меня есть объект, который я передаю службе WCF. Затем на сервере служба изменяет некоторые свойства объекта и возвращает значение типа int.

На стороне клиента, после вызова службы, изменения, внесенные в свойства объектов, отсутствуют.

Мои модульные тесты работают нормально. Но при наезде на сервисы возникает проблема.

Есть какие нибудь идеи как это починить?


person Community    schedule 31.08.2009    source источник


Ответы (2)


Когда вы передаете что-то за границу службы, оно передается по значению, а не по ссылке, поэтому любые изменения, сделанные на сервере, не будут распространяться на объект, который вы передали от клиента. Таким образом, вы захотите вернуть измененный объект обратно клиенту. Если вам также нужно вернуть int, вы можете создать класс-оболочку, который может содержать как int, так и измененный объект.

person olle    schedule 31.08.2009
comment
Спасибо. Я надеялся, что может быть атрибут, чтобы исправить это, но это имеет смысл. - person ; 01.09.2009

@jodogger, может быть, я что-то упустил, но если служба вернет целое число, это точно не изменит ваш объект.

Проблема в том, что ваш объект на самом деле никогда не совершает круговой путь к серверу. Из-за автономной природы WCF необходимо передавать значения byval, а не byref.

Если вам нужно изменить значения в службе WCF, вам нужно сделать что-то вроде этого:

myObject = WCFService.MethodName(myObject);

На самом деле это не тот же объект, который возвращается, но вы будете затирать свой старый объект новыми значениями этого объекта.

Обратите внимание, что возвращаемый объект должен быть создан вами в разделе интерфейса DataContract, а также самой реализации.

person Rap    schedule 31.08.2009