Сделайте мой сервис WCF вернуть JSON - PullRequest
3 голосов
/ 14 сентября 2010

Я пытаюсь заставить мой метод службы WCF возвращать JSON-объект, но он не работает, когда я открываю в веб-браузере, он показывает xml.

Как я могу заставить этот метод возвращать JSON?

Я вставил [WebGet (ResponseFormat = WebMessageFormat.Json)], но это не помогло

[WebGet(ResponseFormat = WebMessageFormat.Json)]  
protected override IEnumerable<KeyValuePair<string, SampleItem>> OnGetItems()  
{  
   // TODO: Change the sample implementation here  
   if (items.Count == 0)  
   {  
      items.Add("A", new SampleItem() { Value = "A" });  
      items.Add("B", new SampleItem() { Value = "B" });  
      items.Add("C", new SampleItem() { Value = "C" });  
   }  
   return this.items;  
}  

Ответы [ 2 ]

4 голосов
/ 14 сентября 2010

Для того, чтобы это работало, вам нужно разместить его с webHttpBinding и WebServiceHostFactory в вашем файле web.config и *.svc службы.

Вы не показывали ни web.config, ни другие конфигурации - поэтому я не могу точно сказать, что вы делаете. Но формат ответа JSON в атрибуте WebGet поддерживается только в службах WCF в стиле REST. Атрибут WebGet игнорируется для любых привязок на основе SOAP, например, basicHttpBinding, wsHttpBinding, netTcpBinding и т. Д.

Дополнительные сведения о службах WCF в стиле REST см. В Центре разработчиков REST WCF и о том, как настроить и использовать службы WCF в стиле REST.

Обновление: , чтобы ваш * .svc-файл работал должным образом как служба REST, которая использует атрибут WebGet и возвращает JSON, необходимо убедиться, что указана правильная фабрика хоста службы:

<%@ServiceHost Language="C#" Service="YourService"
               Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

Указывая WebServiceHostFactory, вы указываете среде выполнения WCF использовать эту службу в качестве службы REST, а затем все остальные компоненты должны автоматически встать на свои места.

0 голосов
/ 14 сентября 2010

Вы также установили WebHttpBehaviour? В противном случае WebGet не работает. См MSDN

И этот атрибут относится к операциям службы, а не к простым методам. Вы не показываете остальные свои сервисы, но примеры, которые я видел, используя WebGet, имели этот атрибут в интерфейсе (контракт на сервис).

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