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 не поддерживает несколько шаблонов, которые имеют эквивалентный путь в качестве шаблона 'getstreamurl? Ch={ch}', но имеют разные строки запроса, где все строки запроса не могут быть устранены неоднозначностью с помощью литеральных значений. Смотрите документацию для UriTemplateTable для более подробной информации.
Их, очевидно, можно различить, но кажется, что WCF только читает доводы, и это все... Есть предложения?
2 ответа
Нет, я не думаю, что вы можете сделать это программно во время выполнения. Конечно, вы можете сделать, если выставить две разные конечные точки из вашей службы - одну, возвращающую XML, другую, возвращающую JSON, а затем программно выбрать, какую из них вызывать из вашего клиентского приложения.
Марк
Обновление: как правильно отмечает Стив Мичелотти, это автоматическое переключение между JSON и XML теперь может быть достигнуто в WCF 4.0. WCF 4.0 имеет улучшенную поддержку REST, которая также включает функцию выбора формата сообщения, основанную на HTTP-заголовках принятия.
Дополнительные сведения о новых функциях WCF 4.0 см. В разделе "Введение разработчика в WCF 4.0".
Вы можете сделать это, если ваша служба отдыха настроена автоматически, выберите тип ответа.
Затем по запросу клиента просто добавьте нужный заголовок. Accept: application/json