5

Вопрос по wcf, rest – WCF WebInvoke ResponseFormat

У меня есть служба перезапуска 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 does not support multiple templates that have equivalent path as template 'getstreamurl?ch={ch}' but have different query strings, where the query strings cannot all be disambiguated via literal values. See the documentation for UriTemplateTable for more detail

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

2ответа

6

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

Марк

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

Для получения дополнительной информации о новых функциях WCF 4.0 см .:Введение разработчика в WCF 4.0

3

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

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

RelatedQuestions