WCF WebInvoke ResponseFormat - PullRequest
       17

WCF WebInvoke ResponseFormat

5 голосов
/ 17 июня 2009

У меня есть служба перезапуска WCF, и я хочу позволить пользователю выбрать, какой формат запроса он хочет, у меня есть украшения

    [OperationContract]
    [WebInvoke(Method = "GET", 
        ResponseFormat = WebMessageFormat.Xml, 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        UriTemplate = "getstreamurl?ch={ch}&format=xml")]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "getstreamurl?ch={ch}&format=json")]

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

    [WebInvoke(Method = "GET", 
        ResponseFormat = WebMessageFormat.Xml, 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        UriTemplate = "getstreamurl?ch={ch})]

    [OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "getstreamurl?ch={ch}&format=json")]

Если XML является значением по умолчанию, если я пытаюсь вызвать метод службы через браузер, он говорит мне, что:

UriTemplateTable не поддерживает несколько шаблонов, которые имеют эквивалентный путь в качестве шаблона 'getstreamurl? Ch = {ch}', но имеют разные строки запроса, где все строки запроса не могут быть устранены неоднозначностью через литеральные значения. См. Документацию для UriTemplateTable для более подробной информации

Их, очевидно, можно различить, но кажется, что WCF только читает аргумент и это все ... Есть предложения?

Ответы [ 2 ]

6 голосов
/ 18 июня 2009

Нет, я не думаю, что вы можете сделать это программно во время выполнения. Конечно, вы можете сделать, если выставить две разные конечные точки из вашей службы - одну, возвращающую XML, другую, возвращающую JSON, а затем программно выбрать, какую из них вызвать из вашего клиентского приложения.

Марк

Обновление: , как правильно указывает Стив Мичелотти, это автоматическое переключение между JSON и XML теперь может быть достигнуто в WCF 4.0. WCF 4.0 имеет улучшенную поддержку REST, которая также включает в себя функцию выбора формата сообщения, основанную на заголовках принятия HTTP.

Подробнее о новых функциях WCF 4.0 см. Введение разработчика в WCF 4.0

3 голосов
/ 30 июля 2011

Вы можете сделать это, если ваша служба отдыха настроена на автоматический выбор типа ответа.

Затем по запросу клиента просто добавьте необходимый заголовок. Accept: application / json

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