WCF IsReference = true сбрасывает значения по умолчанию - PullRequest
0 голосов
/ 21 октября 2011

У меня есть очень простая служба WCF 4.0, в которой я возвращаю объект сущности POCO, для которого IsReference установлено значение true.Когда я возвращаю объект из моего сервиса, значения примитивных типов (int, double и т. Д.) Устанавливаются правильно, а те, у которых есть ссылки, также сериализуются должным образом, я убедился, что сериализация происходит правильно, поместив следующий код перед возвратомзаявление.Я также проверил, что члены правильно помечены [DataMember], и у них есть публичные методы получения / установки.Однако, когда объект получен вызывающей стороной, все типы примитивов устанавливаются в 0, а типы со ссылками устанавливаются в NULL.

Буду признателен за любую помощь!

try
       {
           var stream = new MemoryStream();
           var dataContractSerializer = new DataContractSerializer(onlineSellItemDetail.GetType());

           dataContractSerializer.WriteObject(stream, onlineSellItemDetail);


       }

       catch (Exception ex)
       {
           Console.WriteLine(ex.InnerException.ToString()); 
       }

1 Ответ

0 голосов
/ 27 апреля 2012

Это почти всегда, потому что на стороне клиента не было получено ни XML, ни пустого XML, ни несовместимого XML.Иногда это происходит из-за того, что поток не был очищен или закрыт должным образом на стороне службы.В других случаях клиентская сторона работает с полностью допустимым XML в своем собственном потоке, но читает XML, возможно, не начиная с начала потока.Если вы включаете трассировку на стороне службы и на стороне клиента, генерируете журналы трассировки и анализируете с помощью SvcTraceViewer, а параллельно используете Fiddler для мониторинга проводного трафика как на стороне клиента, так и на стороне службы, я думаю, вы найдетеответь точно!

...