2015-06-09 2 views
0

Когда я пытаюсь получить класс, заполненный данными, я никогда не получаю нужные данные. Логические значения в классе ниже всегда возвращают значение false.Почему мой WebGet возвращает пустой класс

Когда я называю те же GetState функцию от Почтальона не из Chrome без внесения каких-либо изменений, я получаю результаты, которые я бы ожидать

У меня есть класс, как Wich выглядит примерно так:

 [DataContract] 
     public class State 
     { 
      [DataMember] 
      public bool Camera_1_Ok { get; set; } 
      [DataMember] 
      public bool Camera_2_Ok { get; set; } 
      [DataMember] 
      public bool Camera_3_Ok { get; set; } 
     } 

Мой ServiceContract Интерфейс выглядит следующим образом:

 [ServiceContract] 
     interface IConnectionService 
     { 
      [OperationContract] 
      [WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetState", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)] 
      State GetState(); 
     } 

реализация GetState выглядит следующим образом:

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] 
     public sealed class WCFServer : IConnectionService 
     { 
      public State GetState() 
      { 
       State tempState = new State(); 
       State.Camera_1_OK = true; 
       State.Camera_2_OK = true; 
       State.Camera_3_OK = true; 

       return tempState; 
      } 

Я удостоверился, что обе стороны службы имеют одинаковый класс «состояние» и тот же интерфейс «IConnectionService».

Почему логические числа в классе, которые возвращаются вызывающей машине, никогда не установлены? И почему я получаю нужные данные, когда я вызываю функцию из Chrome или Postman?

Awnsers к аналогичным вопросам упоминается [DataContract] и [DataMember] атрибутов, но я уже добавил их в свой класс.

PS: Когда я устанавливаю ResponseFormat в WebMessageFormat.Json по обе стороны службы, я получаю данные, как ожидалось. К сожалению, это не будет решением, так как был запрошен формат Xml.

+1

Осмотрите запрос с помощью Fiddler и узнайте, как они отличаются друг от друга, когда запрос выполняется в обоих сценариях. Также попробуйте не устанавливать форму ответа, и пусть среда обрабатывает ее. Он решает форму ответа из заголовка ответа «Принять» и возвращает в формате соответствующим образом. – Rajesh

+0

Я не мог найти никаких различий с fiddler, кроме как Content-Type, который выполняется, если он находится в формате Json или XML. так что не повезло. – Rik

+0

Можете ли вы опубликовать информацию о том, как выглядит ваш конфиг? – Rajesh

ответ

0
BodyStyle = WebMessageBodyStyle.Bare 

Затем верните System.IO.Stream из вашей функции.

После этого попробуйте де-сериализовать поток в приемнике.

Смежные вопросы