ResponseFormat для WCF в JSON и XML одновременно? - PullRequest
4 голосов
/ 28 сентября 2010

При запросе объекта, например, с использованием REST, возможно ли получить ответ в формате json и xml или мне нужно создать UriTemplates, которые выглядят примерно так:

[WebInvoke(UriTemplate="&format=json?user/{id}", ResponseFormat=WebMessageFormat.Json)]

[WebInvoke(UriTemplate="&format=xml?user/{id}", ResponseFormat=WebMessageFormat.Xml)]

Причина, по которой я спрашиваю,потому что мне может понадобиться один формат, возвращенный для приложения на телефоне Android, например, и другой тип, возвращенный для приложения на ноутбуке.

Кроме того, могут ли методы иметь одно и то же имя, например «Зарегистрироваться», или мне нужноодин из них называется:

RegisterJSON (пользователь-пользователь), а другой - RegisterXML (пользователь-пользователь)

Ответы [ 2 ]

8 голосов
/ 28 сентября 2010

Доступно из коробки в WCF 4 (.NET 4.0).Проверьте AutomaticFormatSelectionEnabled свойство WebHttpBehavior.Вы также можете установить это свойство из конфигурации.Я показал пример здесь .

1 голос
/ 28 сентября 2010

Из коробки вам нужно два отдельных метода - по одному для каждого формата ответа.Кроме того, эти методы должны иметь отдельные имена, поскольку URL-адрес в REST должен быть уникальным - поэтому имена методов должны быть уникальными.

С помощью небольшого количества хитроумного кодирования расширяемости WCF вы можете легко получить динамический формат ответакак добавление атрибута к вашему методу обслуживания:

[OperationContract]
[WebGet(UriTemplate = "GetData?param1={i}&param2={s}")]
[DynamicResponseType]
public SampleResponseBody GetData(int i, string s)
{
    return new SampleResponseBody() 
               { 
                  Name = "Test",
                  Value = s, 
                  Time = DateTime.Now.ToShortTimeString() 
               };
}

См. этот аккуратный атрибут [DynamicResponseType] там ??

Ознакомьтесь с полным сообщением в блоге Дамиана Мехерса: WCF REST Services: Установка формата ответа на основе ожидаемого типа запроса для всех важных деталей!

Обновление: К сожалению, похоже, пример кода для этой статьи больше не доступен.Кайл Бейер основывался на работе Дамиана и опубликовал свою расширенную улучшенную версию в этом сообщении в блоге WCF и REST, подход к использованию заголовков содержимого и типа HTTP для сериализации объектов .Отличный материал.

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