2013-10-15 3 views
1

Я пытаюсь получить данные из службы WCF REST, чтобы вернуться как xml или json.вызовите службу обслуживания wcf и возвращайте данные как xml или json

можно вернуть данные в виде XML или JSON при установке RequestFormat и ResponseFormat с помощью атрибута WebInvoke и установки как в соответствующем формате, как, например:

Но я не хочу, чтобы жёстко формат, поэтому исследовал его далее в Интернете, и я нашел пару вещей, но независимо от того, что я делаю, он всегда возвращает мои данные в формате xml.

Вот что я сделал:

  1. Убрана RequestFormat и ResponseFormat из атрибута WebInvoke.

    [OperationContract] 
    [WebInvoke(
        Method = "GET", 
        RequestFormat = WebMessageFormat.Json, 
        ResponseFormat = WebMessageFormat.Json, 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        UriTemplate = "Search/{searchName}/{fieldValues}")] 
    Result Search(string searchName, string fieldValues); 
    
  2. Я добавил следующий раздел моей web.config:

    <system.serviceModel> 
        <standardEndpoints> 
        <webHttpEndpoint> 
         <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/> 
        </webHttpEndpoint> 
        </standardEndpoints> 
    </system.serviceModel> 
    

    Я не знаю, если выше требуется, так как я был в состоянии форматировать как в формате без этого в моем web.config, но я думаю, это действительно говорит automaticaFormat

  3. При вызове WebClient, я установил оба Content-Type и Accept заголовки application/xml или `приложения/JSON.

    Но даже после внесения этих изменений и установки моих заголовков на application/json, он по-прежнему возвращает данные в формате XML.

    Я попробовал это в Fiddler, но то же самое. Запрос получен, ответ возвращается, но в xml.

  4. Я также попытался положить следующий код в вызове метод WCF, но до сих пор ничего хорошего:

    WebOperationContext.Current.OutgoingResponse.ContentType = "application/json"; 
    
  5. Наконец, я нашел это article и последовал шаги, насколько я могу сказать, но нет хорошо еще раз! Просто найдите «раздел выбора формата сообщения».

У меня явно что-то отсутствует, но что ??? Кто-нибудь получил какие-либо идеи о том, как это можно достичь?

+1

У служб ASP.NET Web API эти функции встроены. Используйте это, если сможете - если вам не нужно что-то очень специфичное для WCF. – YK1

ответ

0

То, что вы запрашиваете, - это то, чего я действительно достиг сегодня. Мне нужно было создать службу RESTful, предоставляющую либо JSON, либо XML взамен. Это немного проблемно-зависимый, но если вы читаете между строк следующий блог показывает, как добиться этого с помощью возвращаемого типа MemoryStream:

http://www.j4jayant.com/articles/fhir/22-fhir-feel-2

В функции GetResourceFeed, вы можете увидеть, как Accept значение в запросе используется для переключения между JSON и XML (атомом). Пожалуйста, не стесняйтесь попробовать.

+0

Я уже пробовал это. См. Пункт 4. Я попробовал еще раз, убедившись, что мой код основан на упомянутой вами статье, но ничего хорошего. Он все еще не возвращает данные в формате json, но оба xml/json отлично работают, если я использую WebInvoke. Есть еще предложения? – Thierry

+0

Вы объединили этот тест с MemoryStream из примера? Вы заменили тип возвращаемого результата на MemoryStream? – kroonwijk

+0

Я понимаю, что вы имеете в виду! Я не думал, что это важная часть, но, возможно, это будет фактическое решение. Я думал об этом сам, то есть конвертировать вручную на конец сервера в соответствующий формат и не полагаться на MS, чтобы делать это автоматически из-за существующих проблем, но также из-за проблем с форматированием xml! Сейчас я оставлю этот вопрос открытым и обновит вас позже, поскольку я потратил слишком много времени на это, и я испытываю давление здесь, чтобы закончить проект. Но определенно вернется назад. – Thierry