Лучший способ поддержать данные публикации «application/x-www-form-urlencoded» с помощью WCF?
-
03-07-2019 - |
Вопрос
Я создаю службу WCF на основе спецификации W3C, которая определяет конечную точку веб-службы RESTful, которая принимает данные публикации «application/x-www-form-urlencoded».WCF по умолчанию не поддерживает этот тип кодирования сообщений, и я нашел ряд различных примеров создания контракта, который выглядит следующим образом:
XElement Query_Post(Stream postData);
И затем в рамках реализации декодирования postData
трансляцию с помощью HttpUtility.ParseQueryString
метод.
Кто-нибудь знает более строго типизированный способ поддержки «application/x-www-form-urlencoded» в WCF?
Я хотел бы, чтобы мой контракт на эксплуатацию был:
XElement Query_Post(string query, string [] params);
Решение
Лучший способ - использовать Stream
нравиться Необработанный HTTP POST с WCF или то, что ты говоришь.Причина в том, что WCF абстрагирует все элементы физического макета уровня связи из кода службы.В идеале вы хотели бы создать сервис, который можно было бы превратить в SOAP или REST, просто щелкнув переключатель.
Чтобы поддерживать его изначально, вам, вероятно, придется расширить WebHttpBinding
или создайте свою собственную привязку и реализуйте пользовательский кодер.Это симметрично выводу, как говорится в связанном сообщении.Вам придется выкрутить руки, чтобы WCF выдавал данные, отличные от XML/JSON.
Другие советы
Библиотека WCF REST Contrib обеспечивает эту функциональность:
https://github.com/mikeobrien/WcfRestContrib
Он включает в себя форматтер POX и форматировщик URL-адресов форм и позволяет легко создавать свои собственные.Форматеры сопоставляются с типами MIME и автоматически выбираются для сериализации/десериализации тела объекта на основе типа контента и принятия заголовков.